home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Reference / the cmsp digests ('94-'97) / csmp digest Vol 4 No 027 < prev    next >
Text File  |  1996-12-03  |  135KB  |  3,703 lines

  1. C.S.M.P. Digest             Mon, 02 Dec 96       Volume 4 : Issue 27
  2.  
  3. Today's Topics:
  4.  
  5.         ?? Sound Manager freqCmd question
  6.         Apple telephony and Apple events
  7.         AppleScript command always crashing
  8.         Custom Appletalk driver to tunnel through TCP-IP
  9.         Detecting the Scriptable Finder reliably?
  10.         Drag gray rgn
  11.         How Do I Disable Power Key?
  12.         How do I convert a creator and file type???????
  13.         How to get the "kind" of a file
  14.         Mac C help-Random
  15.         MacOS Printing Bug!
  16.         OOP vs Structured style WAS: Re: Reasons for bloat?
  17.         Question: NewGWorld call returns error -108
  18.         Reasons for bloat?
  19.         Writing Netscape Plugins...How ?
  20.         [Q] AppleScript Variable
  21.         [Q] Difference between MOVE.L and MOVEA.L
  22.         [Q] Hiding Applications
  23.         [Q] How to tell if you're "hidden"?
  24.         [Q] forcing updateEvts & turning a font question
  25.         cicn-ICON conundrum (cicn != 32x32 == UGLY!)
  26.         mac batch file conversion
  27.         scrolling game help
  28.         where find routines for MacTCP connections?
  29.  
  30.  
  31.  
  32. The Comp.Sys.Mac.Programmer Digest is moderated by Mark Aiken
  33. (marka@ee.mcgill.ca).
  34.  
  35. The digest is a collection of article threads from the internet
  36. newsgroups comp.sys.mac.programmer.help, csmp.tools, csmp.misc and
  37. csmp.games. It is designed for people who read news semi-regularly and
  38. want an archive of the discussions.  If you don't know what a
  39. newsgroup is, you probably don't have access to it. Ask your systems
  40. administrator(s) for details. If you don't have access to news, you
  41. may still be able to post messages to the group by using a mail server
  42. like anon.penet.fi (mail help@anon.penet.fi for more information).
  43.  
  44. Each issue of the digest contains one or more sets of articles (called
  45. threads), with each set corresponding to a 'discussion' of a particular
  46. subject.  The articles are not edited; all articles included in this digest
  47. are in their original posted form (as received by our news server at
  48. ee.mcgill.ca).  Article threads are not added to the digest until the last
  49. article added to the thread is at least two weeks old (this is to ensure that
  50. the thread is dead before adding it to the digest).  Article threads that
  51. consist of only one message are generally not included in the digest.
  52.  
  53. The digests can be obtained by email, ftp or through the World Wide Web.
  54.  
  55. If you want to receive the digest by mail, send email to 
  56. majordomo@ee.mcgill.ca with no subject and one of the following commands
  57. as body:
  58.  
  59.     help                        Sends you a summary of commands
  60.     subscribe csmp                      Adds you to the mailing list
  61.     unsubscribe csmp                    Removes you from the list
  62.  
  63. Once you have subscribed, you will automatically receive each new
  64. issue as it is created.
  65.  
  66. Back issues are available by ftp from Info-Mac mirror sites in the
  67. per/csmp subdirectory, e.g.
  68.  
  69.   ftp://sumex-aim.stanford.edu/info-mac/per/csmp/
  70.  
  71. The contents of all back issues can be searched by accessing the
  72. following URL, courtesy of Andrew Barry (ajbarry@ozemail.com.au):
  73.  
  74.     http://marvin.stattech.com.au/search.html
  75.  
  76. They can also be searched through the following URLs, thanks to
  77. Tim Tuck (Tim.Tuck@sensei.com.au):
  78.  
  79.     http://wais.sensei.com.au/searchform.html
  80.     wais://wais.sensei.com.au:210/csmp?
  81.  
  82. -------------------------------------------------------
  83.  
  84. >From heaney@crl.com (John S. Heaney)
  85. Subject: ?? Sound Manager freqCmd question
  86. Date: 14 Nov 1996 12:37:49 -0800
  87. Organization: CRL Dialup Internet Access    (415) 705-6060  [Login: guest]
  88.  
  89.  
  90. I'm using the freqCmd to loop a sample sound stored as a 'snd ' resource
  91. so I can play it for an arbitrarily long time (until I stop it). I've set
  92. it up according to what I read in IM: Sound. I'm having one problem,
  93. though. The freqCmd takes a frequency parameter. The documentation says, 
  94.  
  95. "If you are playing a sampled sound, however, you can modify the 
  96. sampleRate field of the sound header to play a sound at an arbitrary 
  97. frequency. To do so, use the following formula:
  98.  
  99. new sample rate = (new frequency / original frequency) * original sample rate
  100.  
  101. where the new and original frequencies are measured in hertz."
  102.  
  103. This doesn't refer to the frequency paramter, but rather, to the sample
  104. rate, the field in the sound header, I imagine. Anyway, I don't really
  105. care about this because I want to play the sound at it's normal rate and
  106. frequency (the sound isn't a note, it's a musical phrase). I tried using 1
  107. for the frequency and that comes the closest to being correct, but it's a
  108. little bit fast--a little higher frequency. If I use 0 then I get no
  109. sound. Since this doesn't seem to be a Fixed type, I can't enter something
  110. less than 1. 
  111.  
  112. Does anyone know how I determine what values I'm supposed to use? I just 
  113. want the sound to play at it's normal rate and frequency.
  114. -- 
  115. John Heaney              Time flies whether you're having fun or not.
  116. heaney@crl.com
  117.  
  118. +++++++++++++++++++++++++++
  119.  
  120. >From heaney@crl.com (John S. Heaney)
  121. Date: 14 Nov 1996 16:18:22 -0800
  122. Organization: CRL Dialup Internet Access    (415) 705-6060  [Login: guest]
  123.  
  124. In article <56fvut$88j@crl7.crl.com>, John S. Heaney <heaney@crl.com> wrote:
  125. >
  126. >I'm using the freqCmd to loop a sample sound stored as a 'snd ' resource
  127. >so I can play it for an arbitrarily long time (until I stop it). I've set
  128. >it up according to what I read in IM: Sound. I'm having one problem,
  129. >though. The freqCmd takes a frequency parameter. The documentation says, 
  130. >
  131. >"If you are playing a sampled sound, however, you can modify the 
  132. >sampleRate field of the sound header to play a sound at an arbitrary 
  133. >frequency. To do so, use the following formula:
  134. >
  135. >new sample rate = (new frequency / original frequency) * original sample rate
  136. >
  137. >where the new and original frequencies are measured in hertz."
  138. >
  139. >This doesn't refer to the frequency paramter, but rather, to the sample
  140. >rate, the field in the sound header, I imagine. Anyway, I don't really
  141. >care about this because I want to play the sound at it's normal rate and
  142. >frequency (the sound isn't a note, it's a musical phrase). I tried using 1
  143. >for the frequency and that comes the closest to being correct, but it's a
  144. >little bit fast--a little higher frequency. If I use 0 then I get no
  145. >sound. Since this doesn't seem to be a Fixed type, I can't enter something
  146. >less than 1. 
  147. >
  148. >Does anyone know how I determine what values I'm supposed to use? I just 
  149. >want the sound to play at it's normal rate and frequency.
  150.  
  151. Just to add a little more information...I tried leaving the frequency
  152. parameter at 1 and changing the sample rate to a lower number. If I set
  153. the rate to 19/20ths of the rate stored in the file then it seems to work
  154. at just the right speed and frequency. Unfortunately, there is some
  155. audible distortion. Is there something magic about 19/20? Is there some 
  156. other way I can make this adjustment without the distortion?
  157.  
  158. Thanks.
  159.  
  160. -- 
  161. John Heaney              Time flies whether you're having fun or not.
  162. heaney@crl.com
  163.  
  164. +++++++++++++++++++++++++++
  165.  
  166. >From heaney@crl.com (John S. Heaney)
  167. Date: 15 Nov 1996 13:56:14 -0800
  168. Organization: CRL Dialup Internet Access    (415) 705-6060  [Login: guest]
  169.  
  170. In article <56fvut$88j@crl7.crl.com>, John S. Heaney <heaney@crl.com> wrote:
  171. >
  172. >I'm using the freqCmd to loop a sample sound stored as a 'snd ' resource
  173. >so I can play it for an arbitrarily long time (until I stop it). I've set
  174. >it up according to what I read in IM: Sound. I'm having one problem,
  175. >though. The freqCmd takes a frequency parameter. The documentation says, 
  176. >
  177. >"If you are playing a sampled sound, however, you can modify the 
  178. >sampleRate field of the sound header to play a sound at an arbitrary 
  179. >frequency. To do so, use the following formula:
  180. >
  181. >new sample rate = (new frequency / original frequency) * original sample rate
  182. >
  183. >where the new and original frequencies are measured in hertz."
  184.  
  185. I got it figured out. The trick is to write a frequency into the 
  186. baseFrequency field of the sound header. Then you use the same frequency 
  187. in the freqCmd.
  188.  
  189. Thanks to Michael Kluev for giving me the hint that set me down the right 
  190. path.
  191. -- 
  192. John Heaney              Time flies whether you're having fun or not.
  193. heaney@crl.com
  194.  
  195. +++++++++++++++++++++++++++
  196.  
  197. >From Jackson Software Development <development@jacksoncorp.com>
  198. Date: 15 Nov 1996 14:43:37 GMT
  199. Organization: Jackson Software
  200.  
  201. In article <56gcse$rrg@crl11.crl.com> John S. Heaney, heaney@crl.com
  202. writes:
  203. >>Does anyone know how I determine what values I'm supposed to use? I just 
  204. >>want the sound to play at it's normal rate and frequency.
  205.  
  206. The 2nd parameter should be the MIDI note number, according to Think Ref.
  207. I think that you can get the MIDI note number from the 'snd ' resource
  208. header. It should be a number between 1 and 128. 
  209.  
  210. Darrin
  211.  
  212. ---------------------------
  213.  
  214. >From ajmas@worldnet.fr (Andre-John Mas)
  215. Subject: Apple telephony and Apple events
  216. Date: Sat, 9 Nov 1996 17:47:22 +0100
  217. Organization: SCT / Worldnet - Internet Provider & Information Exchange - Paris, France
  218.  
  219. I am wanting to add a telephone dialing capability to one of my programs
  220. and possibly support a few Apple Events.  What I am wanting to know, is
  221. first what Apple Events are there associated with telephony and whether
  222. I should make the dialing operation to my program and dial using an
  223. external dialing program via Apple Events.
  224. Otherwise, if I created a application spefic AE, such as DIAL that
  225. accepts a number for the telephone number, would it be just as good?
  226.  
  227. e.g.    DIAL with number 003393276780
  228.  
  229. Andre-John
  230.  
  231. +++++++++++++++++++++++++++
  232.  
  233. >From andyb@apple.com (Andy Bachorski)
  234. Date: Mon, 18 Nov 1996 18:05:04 -0800
  235. Organization: Apple Computer, Inc.
  236.  
  237. In article <19961109174722932313@nice0-146.sct.fr>, ajmas@worldnet.fr
  238. (Andre-John Mas) wrote:
  239.  
  240. > I am wanting to add a telephone dialing capability to one of my programs
  241. > and possibly support a few Apple Events.  What I am wanting to know, is
  242. > first what Apple Events are there associated with telephony and whether
  243. > I should make the dialing operation to my program and dial using an
  244. > external dialing program via Apple Events.
  245. > Otherwise, if I created a application spefic AE, such as DIAL that
  246.  
  247. The telephony suite specification was released recently, and can be found at
  248.  
  249. <ftp://ftpdev.info.apple.com/Developer_Services/./Technical_Documentation/Apple_Events_Registry_-_Suites/AE_Suite_-_Telephony.sit.hqx>
  250.  
  251. It should answer most of your questions about what events you'll need to
  252. support. And if it doesn't, ask more questions. ;)
  253.  
  254. Andy Bachorski  -  andyb@apple.com
  255.  
  256. ---------------------------
  257.  
  258. >From jc@or.psychology.dal.ca (John Christie)
  259. Subject: AppleScript command always crashing
  260. Date: 14 Nov 1996 16:45:09 GMT
  261. Organization: ISINet, Nova Scotia
  262.  
  263. Hi
  264.     I find that there are certain AppleScript commands that always 
  265. return an error for me.  I am not certain what they are supposed to do.  
  266. They are always bounded by << and >> and include "ae" (aevt?) at the 
  267. beginning of one of the words.  Anyone know what the problem is?
  268.  
  269. --
  270.  
  271. - ----------------------------------------------------------------
  272.  
  273. John Christie
  274.  
  275. "You aren't free because you CAN choose - only if you DO choose."
  276.  
  277. "All you are is the decisions you make.  If you let circumstances make 
  278. them for you then what you are becomes very easy to estimate."
  279.  
  280. +++++++++++++++++++++++++++
  281.  
  282. >From uzs90z@uni-bonn.de (Michael Schuerig)
  283. Date: Fri, 15 Nov 1996 03:48:46 +0100
  284. Organization: RHRZ - University of Bonn (Germany)            
  285.  
  286. John Christie <jc@or.psychology.dal.ca> wrote:
  287.  
  288. >       I find that there are certain AppleScript commands that always 
  289. > return an error for me.  I am not certain what they are supposed to do.
  290. > They are always bounded by << and >> and include "ae" (aevt?) at the 
  291. > beginning of one of the words.  Anyone know what the problem is?
  292.  
  293. First of all, you are not crashing, you get orderly error messages.
  294.  
  295. The bracketed stuff simply means that AppleScript doesn't know how to
  296. present the internal codes to you as applications and/or scripting
  297. additions that are required to execute the script are missing.
  298.  
  299. Tell us what's inside the brackets, maybe we can tell you which
  300. apps/additions you need.
  301.  
  302. Michael
  303.  
  304. - -
  305. Michael Schuerig
  306. mailto:uzs90z@uni-bonn.de
  307. http://www.rhrz.uni-bonn.de/~uzs90z/
  308.  
  309. +++++++++++++++++++++++++++
  310.  
  311. >From jwbaxter@olympus.net (John W. Baxter)
  312. Date: Thu, 14 Nov 1996 18:36:48 -0800
  313. Organization: Internet for the Olympic Peninsula
  314.  
  315. In article <56fial$fkb@News.Dal.Ca>, jc@or.psychology.dal.ca (John
  316. Christie) wrote:
  317.  
  318. >Hi
  319. >        I find that there are certain AppleScript commands that always 
  320. >return an error for me.  I am not certain what they are supposed to do.  
  321. >They are always bounded by << and >> and include "ae" (aevt?) at the 
  322. >beginning of one of the words.  Anyone know what the problem is?
  323. >
  324.  
  325. Almost always, those problems result from a Scripting Addition which was
  326. present when the script was compiled not being present when the script is
  327. executed.  When you open the script with an editor, it is decompiled using
  328. the available terminology...the guillemots (angle bracke pairs,
  329. "chevrons") are the syntax for a thing (event in this case, classes and
  330. some other possibilities also) with no terminology.  Scripting Additions
  331. supply terminology in addition to function.
  332.  
  333. [You can achieve the same effect by removing the terminology resource from
  334. an application used in the script's tell statements, but that's almost
  335. never the cause unintentionally...it could be the cause if an older
  336. (pre-scriptable) version of the app is present on the machine and the
  337. right version isn't, if you've moved the script.]
  338.  
  339.    --John
  340.  
  341. -- 
  342.   The primary cause of problems is solutions.
  343. John W. Baxter    Port Ludlow, WA, USA     jwbaxter@olympus.net
  344.  
  345. ---------------------------
  346.  
  347. >From Paul Cantrell <pcantrell@macalester.edu>
  348. Subject: Custom Appletalk driver to tunnel through TCP-IP
  349. Date: Mon, 18 Nov 1996 12:36:39 -0600
  350. Organization: The Red-Headed League
  351.  
  352. I have a machine on a local internet, and I'd like to give it access
  353. to an Appletalk network.  It seems that I should be able to write a
  354. custom Appletalk driver which would simply bundle Appletalk packets into
  355. TCP/IP packets, send them via Internet to a machine on the actual
  356. Appletalk network, which would unbundle the packets and pop them into
  357. Appletalk.
  358.  
  359. Does anybody know--
  360.  
  361. (1)  Does something like this already exist?
  362.  
  363. (2)  If not, where can I get docs on writing a custom Appletalk driver?
  364.  
  365. Cheers,
  366.  
  367. Paul
  368. pcantrell@macalester.edu
  369.  
  370. P.S.  Please respond via e-mail if possible, since I don't really
  371. frequent these groups as I used to...  <:|
  372.  
  373. +++++++++++++++++++++++++++
  374.  
  375. >From Goran Larsson <goran.larsson@macexchange.se>
  376. Date: Mon, 18 Nov 1996 23:21:46 +0100
  377. Organization: The Open Gate BBS
  378.  
  379. Paul Cantrell wrote:
  380. > I have a machine on a local internet, and I'd like to give it access
  381. > to an Appletalk network.  It seems that I should be able to write a
  382. > custom Appletalk driver which would simply bundle Appletalk packets into
  383. > TCP/IP packets, send them via Internet to a machine on the actual
  384. > Appletalk network, which would unbundle the packets and pop them into
  385. > Appletalk.
  386. > Does anybody know--
  387. > (1)  Does something like this already exist?
  388.  
  389. Yeah in form of software (TCP Serial) which expands the ARA to IP
  390. networks or ARNS (A Remote Network Server. I'm sorry but I don't have
  391. the link to it any longer. Try searching the Macintouch home page at
  392. www.macintouch.com for it I remember seeing something about it earlier
  393. this fall.
  394.  
  395.  
  396. And of course in hardware. I recommend that you get two Gator box CS
  397. from Cayman and creates a Appletalk tunnel over the IP beetween these.
  398. For more info check out www.cayman.com.
  399.  
  400. Regards
  401.  
  402. Goran Larsson
  403.  
  404. +++++++++++++++++++++++++++
  405.  
  406. >From jude@smellycat.com (Jude Giampaolo)
  407. Date: Mon, 18 Nov 1996 17:22:16 -0500
  408. Organization: CyberDrugs
  409.  
  410. In article <3290ACB7.6797@macalester.edu>, Paul Cantrell
  411. <pcantrell@macalester.edu> wrote:
  412.  
  413. > I have a machine on a local internet, and I'd like to give it access
  414. > to an Appletalk network.  It seems that I should be able to write a
  415. > custom Appletalk driver which would simply bundle Appletalk packets into
  416. > TCP/IP packets, send them via Internet to a machine on the actual
  417. > Appletalk network, which would unbundle the packets and pop them into
  418. > Appletalk.
  419.  
  420. Yup, you may want to take a look at:
  421.  
  422. http://www.cs.mu.OZ.AU/appletalk/doc/MacUAR.userDoc
  423.  
  424. Does IP tunneling ad much more.
  425.  
  426. Please note followups.....
  427.  
  428. -- 
  429. Jude Charles Giampaolo        'I was lined up for glory, but the
  430. jcg161@psu.edu                    tickets sold out in advance'
  431. jude@smellycat.com      http://prozac.cwru.edu/jude/JudeHome.html
  432.  
  433. ---------------------------
  434.  
  435. >From marka@ee.mcgill.ca (Mark Aiken)
  436. Subject: Detecting the Scriptable Finder reliably?
  437. Date: Fri, 15 Nov 1996 18:37:10 -0500
  438. Organization: Will Hack for Food
  439.  
  440. Hello all,
  441.  
  442.    I have a shareware application that relies on the Scriptable Finder
  443. (full-blown object model support, not the wimpy scripting in some previous
  444. releases of the Finder). I am currently testing for its presence by
  445. testing the gestaltOSLCompliantFinder bit of the response to a Gestalt
  446. query with gestaltFinderAttr. My code is below.
  447.  
  448.    I have had several complaints that my app will refuse to run on the
  449. grounds that the Scriptable Finder is not present on certain machines.
  450. These people are often running System 7.5.5 or some other release that
  451. incorporates the Scriptable Finder, or can locate the "Finder Scripting
  452. Extension" in their Extensions folder.
  453.  
  454.    Is there a known problem with this Gestalt bit? Should I be testing
  455. some other way? Enlightenment appreciated. Here is my code:
  456.  
  457.    Boolean FinderIsScriptable()
  458.    {
  459.       long Response;
  460.       OSErr Error;
  461.    
  462.       if((Error = Gestalt(gestaltFinderAttr, &Response)) != noErr)
  463.          return(false);
  464.       
  465.       if(!BitTst(&Response, 31-gestaltOSLCompliantFinder))
  466.          return(false);
  467.    
  468.       return true;
  469.    }
  470.  
  471.    Mark Aiken
  472.    Shareware author
  473.    marka@kagi.com
  474.  
  475. +++++++++++++++++++++++++++
  476.  
  477. >From jumplong@aol.com
  478. Date: 17 Nov 1996 17:27:08 GMT
  479. Organization: AOL http://www.aol.com
  480.  
  481. >Is there a known problem with this Gestalt bit? Should I be
  482. >testing some other way? Enlightenment appreciated. Here is my
  483. >code:
  484. >
  485. >   Boolean FinderIsScriptable()
  486. >   {
  487. >      long Response;
  488. >      OSErr Error;
  489. >   
  490. >      if((Error = Gestalt(gestaltFinderAttr, &Response)) != noErr)
  491. >         return(false);
  492. >      
  493. >      if(!BitTst(&Response, 31-gestaltOSLCompliantFinder))
  494. >         return(false);
  495. >   
  496. >      return true;
  497. >   }
  498.  
  499. I don't see any obvious problem. Here's a smaller, simplified version of
  500. your function that works for me (and doesn't use BitTst).
  501.  
  502. Boolean FinderIsScriptable(void)
  503. {
  504.     long response;
  505.     
  506.    return ( (Gestalt(gestaltFinderAttr, &response) == noErr) &&
  507.             (response & (1 << gestaltOSLCompliantFinder)) );
  508. }
  509.  
  510. - Jim Luther
  511.  
  512. ---------------------------
  513.  
  514. >From gjenkins@facstaff.wisc.edu (Glenn Jenkins)
  515. Subject: Drag gray rgn
  516. Date: 15 Nov 1996 21:03:22 GMT
  517. Organization: University of Wisconsin
  518.  
  519.  Does anyone know of a stratagy to drag the outline of more than one
  520. object? I can do a single object, but I eventually want to be able to drag
  521. more than this and did not want re-invent the wheel
  522.  
  523. Thanks
  524.    Glenn
  525.  
  526. -- 
  527. Glenn H. Jenkins
  528. Dept of Human Oncology
  529. University of Wisconsin
  530. Madison, WI  53792
  531.  
  532. Ph (608) 263-4084
  533. Fx (608) 263-4226
  534.  
  535. +++++++++++++++++++++++++++
  536.  
  537. >From srw@zanshin.com (Steve R Webster)
  538. Date: Sat, 16 Nov 1996 12:38:42 -0800
  539. Organization: Zanshin Software Inc.
  540.  
  541. In article <gjenkins-1511960303540001@144.92.218.197>,
  542. gjenkins@facstaff.wisc.edu (Glenn Jenkins) wrote:
  543.  
  544. >  Does anyone know of a stratagy to drag the outline of more than one
  545. > object? I can do a single object, but I eventually want to be able to drag
  546. > more than this and did not want re-invent the wheel
  547.  
  548. This is a bit obvious, but DragGrayRgn can take a region, and regions can
  549. be discontinuous, so you could simply UnionRgn a bunch of smaller regions
  550. together & pass the resulting mega-region to DragGrayRgn.
  551.  
  552. -steve
  553.  
  554. ---------------------------
  555.  
  556. >From jvsolomito@aol.com
  557. Subject: How Do I Disable Power Key?
  558. Date: 20 Nov 1996 02:14:26 GMT
  559. Organization: AOL http://www.aol.com
  560.  
  561. Hello,
  562. I'm just starting out with programming and I've written one of those apps
  563. that plays a random sound and shows a random pix when any key is pressed.
  564. My daughter loves it, but has now figured out that pressing the power key
  565. "does something really neat, Daddy."
  566.  
  567. Aside from holding my hand over it :-), how can I disable the power key?
  568. Thanks in advance for any help.
  569.  
  570. John Solomito
  571. JVSolomito@aol.com
  572.  
  573. +++++++++++++++++++++++++++
  574.  
  575. >From jeff@nts.com (Jeff Miller)
  576. Date: Tue, 19 Nov 1996 18:51:15 -0800
  577. Organization: Network TeleSystems, Inc.
  578.  
  579. In article <19961120021600.VAA06266@ladder01.news.aol.com>,
  580. jvsolomito@aol.com wrote:
  581.  
  582. > Hello,
  583. > I'm just starting out with programming and I've written one of those apps
  584. > that plays a random sound and shows a random pix when any key is pressed.
  585. > My daughter loves it, but has now figured out that pressing the power key
  586. > "does something really neat, Daddy."
  587. > Aside from holding my hand over it :-), how can I disable the power key?
  588.  
  589. You need the NoPowerOffKey extension.  Check out:
  590.  
  591. http://hyperarchive.lcs.mit.edu/cgi-bin/NewSearch?key=NoPowerOffKey
  592.  
  593. Jeff
  594.  
  595. - ----------------------------------------------------------
  596.  Jeff Miller  |  jeff@nts.com  |  Network TeleSystems, Inc.
  597. - ----------------------------------------------------------
  598.  
  599. ---------------------------
  600.  
  601. >From amcclain@il-icom.net (Andrew W. McClain)
  602. Subject: How do I convert a creator and file type???????
  603. Date: Mon, 04 Nov 1996 21:53:58 -0500
  604. Organization: Illinois Internet Communications, Inc.
  605.  
  606. How do I take the meaningless OSType numbers the file manager gives me and
  607. convert them into nice 4 letter file type and creator types that I can put
  608. into Str255's???????
  609.  
  610. Urgently,
  611. Andrew W. McClain
  612.  
  613. -- 
  614. Andrew McClain
  615.  
  616. +++++++++++++++++++++++++++
  617.  
  618. >From jlaauwen@knoware.nl (Jos Laauwen)
  619. Date: Tue, 05 Nov 1996 21:45:32 +0100
  620. Organization: CODE ZERO
  621.  
  622. In article <amcclain-0411962153580001@206.62.101.79>,
  623. amcclain@il-icom.net (Andrew W. McClain) wrote:
  624.  
  625. >How do I take the meaningless OSType numbers the file manager gives me and
  626. >convert them into nice 4 letter file type and creator types that I can put
  627. >into Str255's???????
  628. >
  629. >Urgently,
  630. >Andrew W. McClain
  631. >
  632. >-- 
  633. >Andrew McClain
  634.  
  635. This is the routine I made for my personal library:
  636.  
  637. StringPtr ost2str ( OSType, StringPtr );
  638. StringPtr ost2str ( OSType type, StringPtr osstr )
  639. {
  640.     short    i;
  641.  
  642.     *osstr = 6;
  643.     osstr [1] = osstr [6] = '\'';
  644.  
  645.     for (i=2; i<6; i++)
  646.         osstr [i] = type >> (5-i)*8 & 0xff;
  647.     return osstr;
  648. }
  649.  
  650. It produces a four char string surrounded by ''. The surrounding is very
  651. useful when the first or fourth char is a space.
  652. I'm sure there are other variations on this theme but I hope this helps.
  653.  
  654. - -
  655. jlaauwen@knoware.nl
  656.  
  657.  
  658. +++++++++++++++++++++++++++
  659.  
  660. >From Brad Bennett <quicomm@interramp.com>
  661. Date: 5 Nov 1996 06:19:08 GMT
  662. Organization: Quicomm
  663.  
  664. amcclain@il-icom.net (Andrew W. McClain) wrote:
  665. >How do I take the meaningless OSType numbers the file manager gives me and
  666. >convert them into nice 4 letter file type and creator types that I can put
  667. >into Str255's???????
  668. >
  669. >Urgently,
  670. >Andrew W. McClain
  671.  
  672. Andrew:
  673.  
  674. Those meaningless "OSType numbers" of the file manager are really not 
  675. that meaningless...it just depends how you view them.  You need to
  676. view them as a set of 4 characters, not as a signed/unsigned long.
  677. i.e.:
  678.  
  679. OSErr             iErr;
  680. FndrInfo       tFndrInfo;
  681. FSSpec      tFSSpec;
  682. SFTypeList     tTL;
  683. StandardFileReply  reply;
  684. char           myFileType[5];
  685. char           myCreatorType[5];
  686.  
  687.  
  688. StandardGetFile(nil,-1,tTL,&reply);  // get a file with dialog
  689. iErr = FSpGetFInfo(&reply.sfFile,&tFndrInfo);  // get file info
  690. memcpy((Ptr)myFileType,&tFndrInfo.fdType,4); // copy file type info 
  691. memcpy((Ptr)myCreatorType,&tFndrInfo.fdCreator,4); // copy file creator myFileType[4] = 0x00; // make sure it is a c string null terminated 
  692. myCreatorType[4] = 0x00; // make sure it is a c string null terminated
  693.  
  694. You will now have two c strings (myFileType and myCreatorType) to do
  695. with what you please.
  696.  
  697. (please note that I haven't compiled the above code exactly as written..
  698. so excuse any slight oversights.  The basic idea remains valid, just use
  699. the fdType and fdCreator OSTypes as 4 characters...not as a long.)
  700.  
  701. Best Regards,
  702.  
  703. Brad Bennett
  704. Quicomm
  705. http://www.quicomm.com
  706.  
  707.  
  708.  
  709. +++++++++++++++++++++++++++
  710.  
  711. >From richarde@sophisticated.com (Richard Elmore)
  712. Date: Thu, 07 Nov 1996 19:37:34 -0800
  713. Organization: Sophisticated Circuits, Inc.
  714.  
  715. In article <amcclain-0411962153580001@206.62.101.79>, amcclain@il-icom.net
  716. (Andrew W. McClain) wrote:
  717.  
  718. > How do I take the meaningless OSType numbers the file manager gives me and
  719. > convert them into nice 4 letter file type and creator types that I can put
  720. > into Str255's???????
  721.  
  722. If you use the PowerPlant LString class instead of a generic Str255 there
  723. is an assignment operator that lets do theString = theOSType.
  724.  
  725. - ---------------------------------------------------------------
  726. Richard Elmore
  727. Sophisticated Circuits, Inc.
  728.  
  729. +++++++++++++++++++++++++++
  730.  
  731. >From David Gillies <daggilli@vader.brad.ac.uk>
  732. Date: Mon, 11 Nov 1996 20:00:01 +0000
  733. Organization: University of Bradford
  734.  
  735. Richard Elmore wrote:
  736. > In article <amcclain-0411962153580001@206.62.101.79>, amcclain@il-icom.net
  737. > (Andrew W. McClain) wrote:
  738. > > How do I take the meaningless OSType numbers the file manager gives me and
  739. > > convert them into nice 4 letter file type and creator types that I can put
  740. > > into Str255's???????
  741. > If you use the PowerPlant LString class instead of a generic Str255 there
  742. > is an assignment operator that lets do theString = theOSType.
  743. The broken way to do it is simply to cast the destination array to a 
  744. long* and stuff it into a char array;
  745.  
  746. char     OSstring[5];
  747. OSType   theType;
  748.  
  749. OSstring[0]=4;
  750.  
  751. *((long*)OSstring+1)=theType;
  752.  
  753. Of course this will break on a 68000 if you hit an odd address. Best
  754. (portable)
  755. way is:
  756.  
  757. typedef unsigned char OSTypeStr[5];
  758.  
  759. OSTypeStr   str;
  760. OSType      theType;
  761.  
  762. str[0]=(unsigned char)((theType&0xFF000000UL)>>24);
  763. str[1]=(unsigned char)((theType&0x00FF0000UL)>>16);
  764. str[2]=(unsigned char)((theType&0x0000FF00UL)>>8);
  765. str[3]=(unsigned char)(theType&0x000000FFUL);
  766. str[4]=0;
  767.  
  768. This makes a c-style ASCIIZ string which you can print using printf.
  769. For Pascal-style strings:
  770.  
  771. str[0]=4;
  772. str[1]=(unsigned char)((theType&0xFF000000UL)>>24);
  773. str[2]=(unsigned char)((theType&0x00FF0000UL)>>16);
  774. str[3]=(unsigned char)((theType&0x0000FF00UL)>>8);
  775. str[4]=(unsigned char)(theType&0x000000FFUL);
  776.  
  777. If you know you are only compiling against 68020-plus machines
  778. then the first, dirty method will work.
  779.  
  780. -- 
  781. ______________________________________________________________________
  782. David A. G. Gillies                        (daggilli@vader.brad.ac.uk)
  783.       University of Bradford, Bradford, West Yorkshire, England
  784. _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  785.  
  786. +++++++++++++++++++++++++++
  787.  
  788. >From Lester Ward <lward@flashpt.com>
  789. Date: Wed, 13 Nov 1996 16:18:49 -0500
  790. Organization: Flashpoint, Inc.
  791.  
  792. > In article <amcclain-0411962153580001@206.62.101.79>, amcclain@il-icom.net
  793. > (Andrew W. McClain) wrote:
  794. > > How do I take the meaningless OSType numbers the file manager gives me and
  795. > > convert them into nice 4 letter file type and creator types that I can put
  796. > > into Str255's???????
  797.  
  798. The "meaningless" OSType numbers are really character arrays. So if your
  799. type is 'Mine', it will be 0x4D696E65. 'M' in hex is 0x4D and so on.
  800. In your debugger, view an OSType as characters and you'll see what I
  801. mean.
  802.  
  803. You could do something ugly like this (assuming a valid vMyOSType):
  804.  
  805. Str255 vStr;
  806.  
  807. strncpy( (char *)&vStr[1],(char *)&vMyOSType,sizeof(OSType) );
  808. vStr[0] = sizeof(OSType)]
  809.  
  810. Wordman
  811.  
  812. +++++++++++++++++++++++++++
  813.  
  814. >From mwherter@waterw.com (Dave McWherter)
  815. Date: Sun, 17 Nov 1996 05:16:25 -0400
  816. Organization: Water Wheel Systems, Marlton, NJ
  817.  
  818. In article <amcclain-0411962153580001@206.62.101.79>, amcclain@il-icom.net
  819. (Andrew W. McClain) wrote:
  820.  
  821. > How do I take the meaningless OSType numbers the file manager gives me and
  822. > convert them into nice 4 letter file type and creator types that I can put
  823. > into Str255's???????
  824. > Urgently,
  825. > Andrew W. McClain
  826. > -- 
  827. > Andrew McClain
  828.  
  829. This will work:
  830.  
  831. OSType mytype;
  832. char  str[5];
  833. long  charmask = 0xFF;
  834.  
  835. str[4] = 0;
  836. str[3] = (mytype && charmask);
  837. mytype = mytype >> 8;
  838. str[2] = (mytype && charmask);
  839. mytype = mytype >> 8;
  840. str[1] = (mytype && charmask);
  841. mytype = mytype >> 8;
  842. str[0] = (mytype && charmask);
  843.  
  844. (Constructing an OSType from a string is much the same...in reverse)
  845.  
  846. -David McWherter
  847.  
  848.  
  849. +++++++++++++++++++++++++++
  850.  
  851. >From humbert@lorien.injep.fr (Xavier Humbert)
  852. Date: Sun, 17 Nov 1996 13:27:48 +0100
  853. Organization: XH Software
  854.  
  855. In article <amcclain-0411962153580001@206.62.101.79>,
  856. amcclain@il-icom.net
  857. (Andrew W. McClain) wrote:
  858.  
  859. > How do I take the meaningless OSType numbers the file manager gives me and
  860. > convert them into nice 4 letter file type and creator types that I can put
  861. > into Str255's???????
  862.  
  863. How about :
  864.  
  865. StringPtr OSTypeToPString(const OSType theType, Str255 theString)
  866. {
  867.     theString[0] = 4;
  868.     *(OSType *)&theString[1] = theType;
  869.     return theString;
  870. }
  871.  
  872. and :
  873.  
  874. char *OSTypeToCString(const OSType theType, char *theString)
  875. {
  876.     theString[4] = 0;
  877.     *(OSType *)&theString[0] = theType;
  878.     return theString;
  879. }
  880.  
  881. HTH,
  882.  
  883. Xav
  884.  
  885. - ---------------------------------------------------------------------
  886. Xavier HUMBERT                                    X H   S O F T W A R E
  887. humbert@lorien.injep.fr                       humbert@spieao.u-nancy.fr
  888.  
  889. +++++++++++++++++++++++++++
  890.  
  891. >From BHuey@worldnet.att.net (Hugh Johnson)
  892. Date: Mon, 18 Nov 1996 19:44:07 -0500
  893. Organization: AT&T WorldNet Services
  894.  
  895. In article <1996111713274838714@gondor.injep.fr>, humbert@lorien.injep.fr
  896. (Xavier Humbert) wrote:
  897.  
  898. > In article <amcclain-0411962153580001@206.62.101.79>,
  899. > amcclain@il-icom.net
  900. > (Andrew W. McClain) wrote:
  901. > > How do I take the meaningless OSType numbers the file manager gives me and
  902. > > convert them into nice 4 letter file type and creator types that I can put
  903. > > into Str255's???????
  904. > How about :
  905. > StringPtr OSTypeToPString(const OSType theType, Str255 theString)
  906. > {
  907. >     theString[0] = 4;
  908. >     *(OSType *)&theString[1] = theType;
  909. >     return theString;
  910. > }
  911. > and :
  912. > char *OSTypeToCString(const OSType theType, char *theString)
  913. > {
  914. >     theString[4] = 0;
  915. >     *(OSType *)&theString[0] = theType;
  916. >     return theString;
  917. > }
  918. > HTH,
  919.  
  920.  
  921. I can't resist throwing in my own varient:
  922.  
  923. union { OSType thLong; Str15 thStr; } u;
  924.  
  925. u.thLong = thTypeInQuestion;
  926. BlockMoveData( u.thStr, u.thStr[1], 4 );
  927. u.thStr[0] = 4;
  928.  
  929. -- 
  930. The Universe is a Figment of its Own Imagination
  931.  
  932.  
  933. ---------------------------
  934.  
  935. >From khym@bga.com (Khym Mahn)
  936. Subject: How to get the "kind" of a file
  937. Date: 11 Nov 1996 23:01:34 -0600
  938. Organization: Real/Time Communications - Bob Gustwick and Associates
  939.  
  940. Hi there, I was wondering if there was an easy way to the "kind" of a
  941. file, the one the Finder shows when you view by something other than
  942. icon or small icon.
  943.  
  944. It looks like I can do it by having a list of file types, such as
  945. APPL, cdev, mdev, INIT, FFIL, etc... and for things that aren't on the
  946. list, get the application associated with the file and append
  947. "document". However, I don't have a comprehensive list of the
  948. "standard" filetypes, that method doesn't known about "kind"
  949. resources, it only works in English, and it seems like a really
  950. annoying way to do it :)
  951.  
  952. So, is there a better way? :)
  953.  
  954. Thanks...
  955. -- 
  956. Name: Dave Huang     |   Mammal, mammal / their names are called /
  957. INet: khym@bga.com   |   they raise a paw / the bat, the cat /
  958. FurryMUCK: Dahan     |   dolphin and dog / koala bear and hog -- TMBG
  959. Dahan: Hani G Y+C 21 Y++ L+++ W- C++ T++ A+ E+ S++ V++ F- Q+++ P+ B+ PA+ PL++
  960.  
  961. +++++++++++++++++++++++++++
  962.  
  963. >From khym@bga.com (Khym Mahn)
  964. Date: 12 Nov 1996 20:58:57 -0600
  965. Organization: Real/Time Communications - Bob Gustwick and Associates
  966.  
  967. In article <3288B7AA.7F11@vader.brad.ac.uk>,
  968. David Gillies  <daggilli@vader.brad.ac.uk> wrote:
  969. >Khym Mahn wrote:
  970. >> It looks like I can do it by having a list of file types, such as
  971. >> APPL, cdev, mdev, INIT, FFIL, etc... and for things that aren't on the
  972. >> list, get the application associated with the file and append
  973. >> "document". However, I don't have a comprehensive list of the
  974. >> "standard" filetypes, that method doesn't known about "kind"
  975. >> resources, it only works in English, and it seems like a really
  976. >> annoying way to do it :)
  977.  
  978. >Check out the PBDTGetAppl() routine...
  979.  
  980. That would get me the application associated with the file, but it
  981. doesn't tell me anything about file types (only the creator is passed
  982. in the parameter block). I'd like something that will tell me a
  983. 'ttxt/ttro' file is a "SimpleText read-only document", an 'APPL' is an
  984. "application", an 'INIT' is a "system extension", etc...
  985. -- 
  986. Name: Dave Huang     |   Mammal, mammal / their names are called /
  987. INet: khym@bga.com   |   they raise a paw / the bat, the cat /
  988. FurryMUCK: Dahan     |   dolphin and dog / koala bear and hog -- TMBG
  989. Dahan: Hani G Y+C 21 Y++ L+++ W- C++ T++ A+ E+ S++ V++ F- Q+++ P+ B+ PA+ PL++
  990.  
  991. +++++++++++++++++++++++++++
  992.  
  993. >From David Gillies <daggilli@vader.brad.ac.uk>
  994. Date: Tue, 12 Nov 1996 17:45:14 +0000
  995. Organization: University of Bradford
  996.  
  997. Khym Mahn wrote:
  998. > Hi there, I was wondering if there was an easy way to the "kind" of a
  999. > file, the one the Finder shows when you view by something other than
  1000. > icon or small icon.
  1001. > It looks like I can do it by having a list of file types, such as
  1002. > APPL, cdev, mdev, INIT, FFIL, etc... and for things that aren't on the
  1003. > list, get the application associated with the file and append
  1004. > "document". However, I don't have a comprehensive list of the
  1005. > "standard" filetypes, that method doesn't known about "kind"
  1006. > resources, it only works in English, and it seems like a really
  1007. > annoying way to do it :)
  1008. > So, is there a better way? :)
  1009. > Thanks...
  1010. Check out the PBDTGetAppl() routine...
  1011. -- 
  1012. ______________________________________________________________________
  1013. David A. G. Gillies                        (daggilli@vader.brad.ac.uk)
  1014.       University of Bradford, Bradford, West Yorkshire, England
  1015. _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
  1016.  
  1017. +++++++++++++++++++++++++++
  1018.  
  1019. >From chrisn+@cmu.edu (Chris Newman)
  1020. Date: Tue, 12 Nov 1996 23:19:41 -0800
  1021. Organization: Altopia Corp. - Affordable Usenet Access - http://www.alt.net
  1022.  
  1023. In article <5690be$det@urchin.bga.com>, khym@bga.com (Khym Mahn) wrote:
  1024. >So, is there a better way? :)
  1025.  
  1026. GetDocumentKindString()
  1027.  
  1028. Only available if Macintosh Easy Open is installed.  See
  1029.         <http://devworld.apple.com/dev/technotes/tb/tb_41.html>
  1030.  
  1031. +++++++++++++++++++++++++++
  1032.  
  1033. >From khym@bga.com (Khym Mahn)
  1034. Date: 13 Nov 1996 22:14:37 -0600
  1035. Organization: Real/Time Communications - Bob Gustwick and Associates
  1036.  
  1037. In article <chrisn+-ya023080001211962319410001@news.alt.net>,
  1038. Chris Newman <chrisn+@cmu.edu> wrote:
  1039. >In article <5690be$det@urchin.bga.com>, khym@bga.com (Khym Mahn) wrote:
  1040. >>So, is there a better way? :)
  1041. >
  1042. >GetDocumentKindString()
  1043.  
  1044. Cool, thanks :) It's almost exactly what I'm looking for... however,
  1045. it doesn't return the right thing for INITs and control panels, among
  1046. other things. I get stuff like "Date & Time document", "Apple Menu
  1047. Options document", etc... So, does this mean I still need to keep a
  1048. table of special file types?
  1049. -- 
  1050. Name: Dave Huang     |   Mammal, mammal / their names are called /
  1051. INet: khym@bga.com   |   they raise a paw / the bat, the cat /
  1052. FurryMUCK: Dahan     |   dolphin and dog / koala bear and hog -- TMBG
  1053. Dahan: Hani G Y+C 21 Y++ L+++ W- C++ T++ A+ E+ S++ V++ F- Q+++ P+ B+ PA+ PL++
  1054.  
  1055. +++++++++++++++++++++++++++
  1056.  
  1057. >From chrisn+@cmu.edu (Chris Newman)
  1058. Date: Sat, 16 Nov 1996 01:02:12 -0800
  1059. Organization: Altopia Corp. - Affordable Usenet Access - http://www.alt.net
  1060.  
  1061. In article <56e6bd$1vq@urchin.bga.com>, khym@bga.com (Khym Mahn) wrote:
  1062.  
  1063. >In article <chrisn+-ya023080001211962319410001@news.alt.net>,
  1064. >Chris Newman <chrisn+@cmu.edu> wrote:
  1065. >>In article <5690be$det@urchin.bga.com>, khym@bga.com (Khym Mahn) wrote:
  1066. >>>So, is there a better way? :)
  1067. >>
  1068. >>GetDocumentKindString()
  1069. >
  1070. >Cool, thanks :) It's almost exactly what I'm looking for... however,
  1071. >it doesn't return the right thing for INITs and control panels, among
  1072. >other things. I get stuff like "Date & Time document", "Apple Menu
  1073. >Options document", etc... So, does this mean I still need to keep a
  1074. >table of special file types?
  1075.  
  1076. Yeah, I noticed that problem.  I ended up special casing the following
  1077. types: cdev, appl, adrp, dfil, fact, INIT, thng, fext, PRER, adev, mdev,
  1078. appe, RDEV, FFIL, LWFN, zsys.  Also the MACS creator.  All system file
  1079. types.  Anyone out there found a way to do this without special casing?
  1080.  
  1081. ---------------------------
  1082.  
  1083. >From lalo7475@saintmarys.edu
  1084. Subject: Mac C help-Random
  1085. Date: Thu, 14 Nov 1996 15:31:05 -0600
  1086. Organization: Deja News Usenet Posting Service
  1087.  
  1088. I'm learning to program and I saw in this book calls like rand(15)
  1089. and rand(10).   The one was to get a 60 percent outcome for a success
  1090. .  Are these calls only picking numbers in the range given? If so
  1091. why in dice games do you use the ( rand() % 6) +1 to get a 1 in six
  1092. outcome. Woudln't you just use rand(6)?
  1093. Thanks
  1094. Frank La Lone
  1095. - ---------------------------------------------------------------------
  1096. This article was posted to Usenet via the Posting Service at Deja News:
  1097. http://www.dejanews.com/           [Search, Post, and Read Usenet News]
  1098.  
  1099. +++++++++++++++++++++++++++
  1100.  
  1101. >From BHuey@worldnet.att.net (Hugh Johnson)
  1102. Date: Thu, 14 Nov 1996 16:16:41 -0500
  1103. Organization: AT&T WorldNet Services
  1104.  
  1105. In article <848002071.29401@dejanews.com>, lalo7475@saintmarys.edu wrote:
  1106.  
  1107. > I'm learning to program and I saw in this book calls like rand(15)
  1108. > and rand(10).   The one was to get a 60 percent outcome for a success
  1109. > .  Are these calls only picking numbers in the range given? If so
  1110. > why in dice games do you use the ( rand() % 6) +1 to get a 1 in six
  1111. > outcome. Woudln't you just use rand(6)?
  1112. > Thanks
  1113. > Frank La Lone
  1114.  
  1115. I think rand() is an ANSI C function, not a Mac toolbox trap. The Mac call
  1116. is Random(), if I'm not mistaken.
  1117.  
  1118. Anyway, I think they both work somewhat alike. They do _not_ return values
  1119. within any specified range. I think the arguments you pass them merely
  1120. "seed" the algorithm that generates the psuedo-random number. In other
  1121. words, the algorithm itself will always return the same result if you keep
  1122. putting in the same seed value, so the idea is, you have to put in a new
  1123. value each time, like the current time (in ticks).
  1124.  
  1125. Anyway, to narrow down the return value of one of these functions, to
  1126. restrict it to a specific range, use the modulus operation. For instance,
  1127. if you want a number between zero and 15, write this:
  1128.  
  1129.  
  1130. long aLong;
  1131.  
  1132. GetDateTime( &aLong );
  1133. aLong = rand( aLong );
  1134. along %= 15;
  1135.  
  1136. -- 
  1137. True American P.O.W. (Prisoner of Worldnet)
  1138.  
  1139. +++++++++++++++++++++++++++
  1140.  
  1141. >From johnm@buttenet.com (Johnathon McAlister)
  1142. Date: Sun, 17 Nov 1996 16:39:54 -0700
  1143. Organization: Home
  1144.  
  1145. In article
  1146. <BHuey-1411961616420001@87.minnesota-001.mn.dial-access.att.net>,
  1147. BHuey@worldnet.att.net (Hugh Johnson) wrote:
  1148.  
  1149. >In article <848002071.29401@dejanews.com>, lalo7475@saintmarys.edu wrote:
  1150. >
  1151. >> I'm learning to program and I saw in this book calls like rand(15)
  1152. >> and rand(10).   The one was to get a 60 percent outcome for a success
  1153. >> .  Are these calls only picking numbers in the range given? If so
  1154. >> why in dice games do you use the ( rand() % 6) +1 to get a 1 in six
  1155. >> outcome. Woudln't you just use rand(6)?
  1156. >I think rand() is an ANSI C function, not a Mac toolbox trap. The Mac call
  1157. >is Random(), if I'm not mistaken.
  1158.  
  1159. True
  1160.  
  1161. >Anyway, I think they both work somewhat alike. They do _not_ return values
  1162. >within any specified range. I think the arguments you pass them merely
  1163. >"seed" the algorithm that generates the psuedo-random number. In other
  1164. >words, the algorithm itself will always return the same result if you keep
  1165. >putting in the same seed value, so the idea is, you have to put in a new
  1166. >value each time, like the current time (in ticks).
  1167.  
  1168. Be careful here!  This could be read that you need to call Random() with a
  1169. param to get random values.  This would be flagged by the compiler as an
  1170. error (if you're lucky) or would crash the computer!  Random() takes no
  1171. parameters - giving it a param would screw up the stack.
  1172.  
  1173. I haven't looked too deeply, but the original IM Vol I, QuickDraw chapter,
  1174. states that the seed is in the global variable "randSeed".
  1175.  
  1176. -- 
  1177. Johnathon McAlister
  1178. Senior Programmer, MT Lottery (days)
  1179. Mac and Internet Consultant (evenings)
  1180. johnm@buttenet.com
  1181.  
  1182. ---------------------------
  1183.  
  1184. >From Robin Lewis <ral@bnr.co.uk>
  1185. Subject: MacOS Printing Bug!
  1186. Date: Thu, 14 Nov 1996 10:23:33 +0000
  1187. Organization: Nortel Limited, Harlow, GB
  1188.  
  1189. Hi,
  1190.     Can someone please confirm that using clip REGIONS does not work during
  1191. printing. In particular, if you use SetClip(clipRgn) before doing your
  1192. drawing, on your printout it behaves like ClipRect(clipRgnBounds). And
  1193. if you use CopyBits with a non-nil clipping region no clipping occurs at
  1194. all during printing.
  1195.     There is a simple way to verify this if you have something like
  1196. 'Flash-It' where you can capture an area of the screen with a lasso,
  1197. thereby creating a 'transparent' PICT with a non-square clipRgn. Open
  1198. that PICT in simpletext, then print it. On the printout your clipRgn has
  1199. been ignored.
  1200.     I can't believe no-one has noticed this before.
  1201.  
  1202. Yours disgruntled, and unclipped,
  1203.     Robin Lewis
  1204.  
  1205. <ral@nortel.co.uk>
  1206.  
  1207. +++++++++++++++++++++++++++
  1208.  
  1209. >From alain@cs.uchicago.edu (Alain Aslag Roy)
  1210. Date: Thu, 14 Nov 1996 16:00:01 GMT
  1211. Organization: The Anti-Weather Forecasters Coalition
  1212.  
  1213. In article <328AF321.6D37@bnr.co.uk>, Robin Lewis <ral@bnr.co.uk> wrote:
  1214.  
  1215. >         Can someone please confirm that using clip REGIONS does not work
  1216. during
  1217. > printing.
  1218.  
  1219. >From Inside Macintosh, Volume 2 (Yup, the old series):
  1220.  
  1221. Page II-156 (Using the Print Manager)
  1222.  
  1223. For printing to the LaserWriter, you'll need to observe the following
  1224. limitations:
  1225.  
  1226. -Regions aren't supported, try to simulate them with polygons.
  1227. -Clipping regions should be limited to rectangles.
  1228. -"Invert" routines aren't supported.
  1229. -Copy is the only transfer mode supported for all objects except text and
  1230. bit images. For text, Bic is also supported. For bit images, the only
  1231. transfer mode not supported is Xor.
  1232.  
  1233. - -----------------------
  1234.  
  1235. So this might be a bit out of date, but it doesn't sound new or unexpected.
  1236.  
  1237. -alain
  1238.  
  1239. +++++++++++++++++++++++++++
  1240.  
  1241. >From "Stephen Coy" <stevec@magna.com.au>
  1242. Date: 16 Nov 96 21:50:59 +1100
  1243. Organization: Magna Data Internet Solutions
  1244.  
  1245. >Hi,
  1246. >    Can someone please confirm that using clip REGIONS does not work during
  1247. >printing. In particular, if you use SetClip(clipRgn) before doing your
  1248. >drawing, on your printout it behaves like ClipRect(clipRgnBounds). And
  1249. >if you use CopyBits with a non-nil clipping region no clipping occurs at
  1250. >all during printing.
  1251. >    There is a simple way to verify this if you have something like
  1252. >'Flash-It' where you can capture an area of the screen with a lasso,
  1253. >thereby creating a 'transparent' PICT with a non-square clipRgn. Open
  1254. >that PICT in simpletext, then print it. On the printout your clipRgn has
  1255. >been ignored.
  1256. >    I can't believe no-one has noticed this before.
  1257. >
  1258. >Yours disgruntled, and unclipped,
  1259. >    Robin Lewis
  1260. >
  1261. G'Day Robin,
  1262.  
  1263. This is a well known problem caused by the fact that postscript has no
  1264. notion of regions. You will probably find that your printing code works
  1265. fine on QuickDraw printers such as the ImageWriter and StyleWriters.
  1266.  
  1267. There is a host of tech notes on printing which you should consider
  1268. reading.
  1269.  
  1270. Regards,
  1271.  
  1272. Steve Coy
  1273.  
  1274.  
  1275.  
  1276.  
  1277. ---------------------------
  1278.  
  1279. >From werdna@cyberjunkie.com (Andrew Wright)
  1280. Subject: OOP vs Structured style WAS: Re: Reasons for bloat?
  1281. Date: Thu, 14 Nov 1996 11:26:06 +1000
  1282. Organization: Prentice Centre, University of Queensland
  1283.  
  1284. <stuff about how C++/OOP is more inefficient and example of NiftyTelnet
  1285. (excellent program I might add) given as example snipped>
  1286.  
  1287. <rebuttal that OOP != framework (eg PowerPlant), and OOP is good snipped.>
  1288.  
  1289. I've got to add my two cents here. I've just written a small program for
  1290. the Mac (in straight C) to learn C, and how to write Mac programs. Now I am
  1291. turning many portions of that (nicely structured) program into classes. It
  1292. actually makes coding simpler in a number of cases. Sure, it takes a little
  1293. getting used to. But I think I agree with both previous posters - yes, C++
  1294. and OOP in general do make life easier. However, frameworks like PowerPlant
  1295. are not necessarily the best way to go for small, tight programs.
  1296. Unfortunately in these days of bloatware, the (relatively) small amount of
  1297. overhead that a framework provides is negligible.
  1298.  
  1299. -- 
  1300. Regards,               |         Visit me on-line
  1301. Andrew Wright          |                at
  1302. werdna@cyberjunkie.com | http://student.uq.edu.au/~s341797
  1303.  
  1304. +++++++++++++++++++++++++++
  1305.  
  1306. >From jkelly@sf.videonics.com (Joseph Kelly)
  1307. Date: Fri, 15 Nov 1996 15:19:52 -0800
  1308. Organization: Videonics, Inc
  1309.  
  1310. In article <werdna-ya023180001411961126060001@news.uq.edu.au>,
  1311. werdna@cyberjunkie.com (Andrew Wright) wrote:
  1312.  
  1313. > <stuff about how C++/OOP is more inefficient and example of NiftyTelnet
  1314. > (excellent program I might add) given as example snipped>
  1315. > <rebuttal that OOP != framework (eg PowerPlant), and OOP is good snipped.>
  1316. > I've got to add my two cents here.
  1317.  
  1318. Proponents of good OOP design say that 75% of time should be spent on
  1319. designing classes, 10% on implementing them (programming, sitting at a
  1320. computer), 5% on prototyping / conferring with users of the end product,
  1321. 10% on testing. In fact, proponents of procedural software engineering
  1322. break it down similarly, with a large (> 65%) time spent on design.
  1323.  
  1324. They add further that elements of user interface are considered in only
  1325. 10% of the (mostly final) design phase.
  1326.  
  1327. The projects that they are referring to are very large scale and complex
  1328. and require the work of more than one programmer (see "Object Oriented
  1329. Analysis and Design", by Booch).
  1330.  
  1331. Some say that converting a procedural C program directly to C++, w/o an
  1332. understanding of design pricinples may actually waste time, as there will
  1333. be a constant need to revise and re-write et al.
  1334.  
  1335. Using a framework is very helpful, according to "Design Patterns: Elements
  1336. of Reusable OO Software", Gamma/Helm/Johnson/Vlissides, as they describe a
  1337. particular application domain (pp26-28); in the case of PP, MA, or TCL
  1338. this refers to a document based application which emphasizes a certain
  1339. cooperation with the MacOS. The problem with frameworks is the steep
  1340. learning curve to become intimate with the framework and its
  1341. interconnections.
  1342.  
  1343. How pertinent do you think that all this emphasis on "good design" is in
  1344. production of non-buggy, on schedule, up to spec macintosh software? Do
  1345. you guys think it applies more to single programmer projects or multi
  1346. programmer projects?
  1347.  
  1348. --joe
  1349.  
  1350. -- 
  1351. Joseph V. Kelly, III |      |\  /|
  1352. Macintosh Geek Dude  |      ||\/||
  1353. Videonics, Inc.      |      ||  ||acintosh, like, wow.
  1354.  
  1355. +++++++++++++++++++++++++++
  1356.  
  1357. >From tfischer@See.Address.In.Signature (Tim Fischer)
  1358. Date: Mon, 18 Nov 1996 09:56:36 -0600
  1359. Organization: Coda Music Technology
  1360.  
  1361. In article <jkelly-1511961519520001@jkelly.videonics.com>,
  1362. jkelly@sf.videonics.com (Joseph Kelly) wrote:
  1363.  
  1364. > How pertinent do you think that all this emphasis on "good design" is in
  1365. > production of non-buggy, on schedule, up to spec macintosh software? Do
  1366. > you guys think it applies more to single programmer projects or multi
  1367. > programmer projects?
  1368.  
  1369. I think the answer has more to do with how much you'll be back in the code
  1370. to enhance, debug, and otherwise modify.  With all but toy projects, this
  1371. will be a lot of time.  Over the years, experts have found that it costs
  1372. much more to modify a program (over time) than it does to design and
  1373. implement it.  All the more true if the design was bad and you have to
  1374. 'kludge' in your enhancements.  Hence the focus on design in recent years
  1375. (first structured, modular programming, then OOP, etc).  People are
  1376. finding out that more $$ invested in design means many less $$$ in the
  1377. future, and happier customers that can have more of the features they want
  1378. in the future without having to pay for a completely redesigned product.
  1379.  
  1380. Anyone who's ever went back inside code they've written a year or more ago
  1381. know that the code might as well have been written by another person. 
  1382. Design idiosyncracies that made a lot of sense while you were writing it
  1383. will make no sense in a year.  This is why it is a good programming
  1384. practice to design and document your code as if you were handing it over
  1385. to another programmer who will have no contact with you in the future. 
  1386. Then when you go back into the code, you can relearn what you were
  1387. thinking (and hopefully not cuss yourself out!)  THe paybacks for this are
  1388. even more obvious when your company hires on a new guy and takes over this
  1389. project from you...  
  1390.  
  1391. While OOP goes a long way to make code more readable (encapuslation is a
  1392. 'good thing'), I still believe that a liberal sprinkling of comments
  1393. throught the code goes is the most important aspect in understanding
  1394. existing code.  I have worked with very well designed systems with almost
  1395. no comments, and it was much harder to get a handle on what's going on. 
  1396. Comments are free, use 'em!  My feeling is you should never have to look
  1397. at the code to find out a) what a procedure/method does, b) what
  1398. pararameters it expects (including defaults), c) what it returns, and d)
  1399. error handling/special cases/etc./etc.
  1400.  
  1401. Where the design pays off is when you need to add new features or change a
  1402. paradigm...  ALWAYS design your code in a way that (within reason) any
  1403. assumption can be changed and it won't break your design or cause a kludgy
  1404. implementation.  A fact of life is that no matter how the code is spec'ed,
  1405. the beta testers will want it to do more...  That feature they said wasn't
  1406. important today, they'll want tomorrow!
  1407.  
  1408. I've been 'blessed' in a previous job to work in legacy code which was
  1409. written almost 20 years ago under a completely different paradigm.  None
  1410. of the original authors of the code were with the company anymore, and
  1411. nobody knew exactly what the program did.  Whenever I was asked to change
  1412. something, the only way to figure out what was going on was follow the
  1413. data through the code with an interactive debugger...  Then you changed it
  1414. and prayed something else didn't break (it usually did...)  This is not an
  1415. exaggeration, I can give you references for this (they're not with that
  1416. company anymore, either!) ;-)
  1417.  
  1418. My $0.02...
  1419.  
  1420. -Tim
  1421.  
  1422. -- 
  1423. - -------------------------------------
  1424. Tim Fischer
  1425. Coda Music Technology
  1426.  
  1427. The following email address is mangled to prevent automated
  1428. unsolicited junk mail.  Replace the '_AT_' with an '@':
  1429.  
  1430. tfischer_AT_codamusic.com
  1431.  
  1432. ---------------------------
  1433.  
  1434. >From yaofei@IDEA.UML.Edu (Fei Yao)
  1435. Subject: Question: NewGWorld call returns error -108
  1436. Date: 15 Nov 1996 03:50:38 GMT
  1437. Organization: A poorly-installed InterNetNews site
  1438.  
  1439.  
  1440. Hi:
  1441.  
  1442. I am using CW 7. In my program I have:
  1443.  
  1444. //********************
  1445. Rect            offsrcRect;
  1446.  
  1447. <snip>
  1448.  
  1449.  SetRect(&offsrcRect, 0, 0, 400, 450);  /* left,top,right,bottom */      
  1450.  GetGWorld(&origPort,&origDev);  /* save window's graphics port */        
  1451.  err = NewGWorld(&gworldPortPtr, 0, &offsrcRect, NULL,NULL,0);
  1452.  if ( err == noErr) 
  1453.  
  1454. <snip>
  1455. //********************
  1456. The above code works fine. But when I increased offsrcRect:
  1457.  
  1458. SetRect(&offsrcRect, 0, 0, 400, 460);   /* left,top,right,bottom */      
  1459.  
  1460. the NewGWorld call returned error of -108 (I got this value by using CW 
  1461. debugger).  I looked up Inside Macintosh, it says NewGWorld will return one of 
  1462. three result codes:
  1463.  
  1464. noError       0        No error
  1465. paramErr    -50     Illegal parameter
  1466. cDepthErr   -157   Invalid pixel depth
  1467.  
  1468. So, what does error -108 mean?  
  1469.  
  1470. BTW, is there a place I can find all the possible error codes listing?
  1471.  
  1472. Thanks in advance.
  1473.  
  1474. +++++++++++++++++++++++++++
  1475.  
  1476. >From mxmora@mxmdesigns.com (Matthew Xavier Mora)
  1477. Date: Thu, 14 Nov 1996 23:20:25 -0800
  1478. Organization: MXM DesignsÅ
  1479.  
  1480. > So, what does error -108 mean?  
  1481.  
  1482.  
  1483. Lets see, type err-108 in Obiwan and it says:
  1484.  
  1485. Err-108 memFullErr iMemFullErr
  1486. Not enough room in heap zone
  1487.  
  1488. > BTW, is there a place I can find all the possible error codes listing?
  1489.  
  1490.  
  1491. Errors.h
  1492.  
  1493.  
  1494. Xavier
  1495.  
  1496. -- 
  1497. Matthew Xavier Mora                    <mailto:mxmora@mxmdesigns.com>
  1498.                                <http://www.best.com/~mxmora/mxm.html>
  1499.  
  1500.  
  1501. +++++++++++++++++++++++++++
  1502.  
  1503. >From davep@best.com (Dave Polaschek)
  1504. Date: Sun, 17 Nov 1996 07:42:44 -0600
  1505. Organization: Polaschek Publishing
  1506.  
  1507. In article <56gpae$87l@ulowell.uml.edu>, yaofei@IDEA.UML.Edu (Fei Yao) wrote:
  1508.  
  1509. > the NewGWorld call returned error of -108 (I got this value by using CW 
  1510. > debugger).  I looked up Inside Macintosh, it says NewGWorld will return
  1511. one of 
  1512. > three result codes:
  1513. >
  1514. > noError       0        No error
  1515. > paramErr    -50     Illegal parameter
  1516. > cDepthErr   -157   Invalid pixel depth
  1517. > So, what does error -108 mean?  
  1518.  
  1519. -108 is out of memory. Increase your application's partition, and it should
  1520. work.
  1521.  
  1522. > BTW, is there a place I can find all the possible error codes listing?
  1523.  
  1524. In Macsbug, you can type error #-108 (the # says it's decimal) to get told
  1525. what most errors are (it's not complete, but it's close).
  1526.  
  1527. The other place to look is in <Errors.h>.
  1528.  
  1529. -DaveP
  1530.  
  1531. -- 
  1532. Dave Polaschek - personal: davep@best.com or davep@mn.uswest.net
  1533. PGP key and other spiffy things at <http://www.best.com/~davep/>
  1534.  
  1535. +++++++++++++++++++++++++++
  1536.  
  1537. >From Mark Simpson <M.Simpson-CSSE96@cs.bham.ac.uk>
  1538. Date: Sun, 17 Nov 1996 11:55:12 +0000
  1539. Organization: School of Computer Science, University of Birmingham, UK
  1540.  
  1541. Fei Yao wrote:
  1542. > Hi:
  1543. > I am using CW 7. In my program I have:
  1544. > //********************
  1545. > Rect            offsrcRect;
  1546. > <snip>
  1547. >  SetRect(&offsrcRect, 0, 0, 400, 450);  /* left,top,right,bottom */
  1548. >  GetGWorld(&origPort,&origDev);  /* save window's graphics port */
  1549. >  err = NewGWorld(&gworldPortPtr, 0, &offsrcRect, NULL,NULL,0);
  1550. >  if ( err == noErr)
  1551. > <snip>
  1552. > //********************
  1553. > The above code works fine. But when I increased offsrcRect:
  1554. > SetRect(&offsrcRect, 0, 0, 400, 460);   /* left,top,right,bottom */
  1555. > the NewGWorld call returned error of -108 (I got this value by using CW
  1556. > debugger).  I looked up Inside Macintosh, it says NewGWorld will return one of
  1557. > three result codes:
  1558. > noError       0        No error
  1559. > paramErr    -50     Illegal parameter
  1560. > cDepthErr   -157   Invalid pixel depth
  1561. > So, what does error -108 mean?
  1562. > BTW, is there a place I can find all the possible error codes listing?
  1563. > Thanks in advance.
  1564.  
  1565. -108 is an out of memory error. I've never used the gworld routines so I
  1566. can't help you beyond that. 
  1567.  
  1568. As for the error code listing, an excellent little application that I
  1569. use is available from:
  1570.   
  1571. ftp://sunsite.doc.ic.ac.uk/packages/info-mac/_Information/mac-errors-20.hqx
  1572. Note that this is my local info-mac mirror - you should use the site
  1573. closest to you, but the pathname after info-mac/ will be the same
  1574.  
  1575. Mark
  1576.  
  1577. ---------------------------
  1578.  
  1579. >From uzs90z@uni-bonn.de (Michael Schuerig)
  1580. Subject: Reasons for bloat?
  1581. Date: Wed, 6 Nov 1996 15:48:32 +0100
  1582. Organization: RHRZ - University of Bonn (Germany)            
  1583.  
  1584.  
  1585. There are several applications that are rather infamous for their
  1586. resource appetite. In some cases such Word 6.0 the reasons seem quite
  1587. obvious, as it contains a port of a half Windows. But what about
  1588. Netscape Navigator 3.0? As it seems it's written using PowerPlant and
  1589. therefore I guess at least somewhat Mac-like -- nevertheless it eats up
  1590. about 9MB of RAM. Why?
  1591.  
  1592. Or, looking elsewhere, at the stuff that appears daily on info-mac. I'm
  1593. really astonished by the RAM and disk footprint of some newly written
  1594. applications that only have remarkably few features. Is this the result
  1595. of carelessness? Anyway, we all know that memory (disk/RAM) is cheap? Or
  1596. just a rational decision, as it would have required so much more effort
  1597. to use less resources? What's the place of frameworks (MacApp, TCL,
  1598. PowerPlant) in this game?
  1599.  
  1600. Wondering,
  1601. Michael
  1602.  
  1603. - -
  1604. Michael Schuerig
  1605. mailto:uzs90z@uni-bonn.de
  1606. http://www.rhrz.uni-bonn.de/~uzs90z/
  1607.  
  1608. +++++++++++++++++++++++++++
  1609.  
  1610. >From fpottier@pauillac.inria.fr (Francois Pottier)
  1611. Date: 6 Nov 1996 16:37:06 GMT
  1612. Organization: INRIA Rocquencourt, BP 105, 78153 Le Chesnay Cedex, France
  1613.  
  1614. In article <wmU=TWq00iWp05qXM0@andrew.cmu.edu>,
  1615. Joshua C Horan  <horan+@andrew.cmu.edu> wrote:
  1616.  
  1617. > Besides who can run 3.0 for more than 3 minutes without discovering
  1618. > it's special "crash or freeze the computer" feature?
  1619.  
  1620. I can. It works fine on my machine.
  1621.  
  1622. >that pointers go at the *bottom* of the heap and that there is this neat
  1623. >HLockHi() function, or while we're at it how about: DisposePtr(),
  1624. >HUnlock(), HPurge().
  1625.  
  1626. These functions are leftover from the 1984 Mac and should have long been
  1627. obsolete, if Apple had been able to ship Copland in time. In a modern
  1628. OS, all developers should see is pointers. It should be the OS's job to
  1629. use the MMU to avoid fragmentation.
  1630.  
  1631. I'm not saying Netscape is well programmed - I'm only saying that looking
  1632. at a program heap tells you nothing about the way it's programmed.
  1633.  
  1634. As for the original question: programmers stop optimizing the program when
  1635. it runs acceptably on their machines. Programmers have fast machines. Hence,
  1636. programs are always resource-hungry.
  1637.  
  1638. --
  1639. Francois Pottier
  1640. Francois.Pottier@inria.fr
  1641. http://pauillac.inria.fr/~fpottier/
  1642.  
  1643. +++++++++++++++++++++++++++
  1644.  
  1645. >From passenger@cybercom.net (T. Vector)
  1646. Date: Thu, 07 Nov 1996 17:32:20 -0400
  1647. Organization: Cyber Access Internet Services (617) 396-0491
  1648.  
  1649. >I was just using Netscape 2.02 the other day and it kept complaining
  1650. >about not having enough memory even with a 9 MB partition!  Good thing I
  1651. >wasn't using 3.0 otherwise it would need 11 MB!  Besides who can run 3.0
  1652. >for more than 3 minutes  without discovering it's special "crash or
  1653. >freeze the computer" feature?
  1654. >Anyway, I used ZoneRanger to take a look at the Netscape heap and it was
  1655. >a complete mess!  There were pointers all over the place and handles
  1656. >locked in the middle of the heap.  This was the worst memory management
  1657. >I've seen in a while.  Maybe we should inform the Netscape developers
  1658. >that pointers go at the *bottom* of the heap and that there is this neat
  1659. >HLockHi() function, or while we're at it how about: DisposePtr(),
  1660. >HUnlock(), HPurge().
  1661. >
  1662. >Anyone else feel up to some Netscape Bashing?
  1663. >
  1664.  
  1665. a dirty heap is the least of its problems. there's stuff in there that
  1666. *nobody* can figure out.  somebody thought they knew how to create
  1667. an A5 world, and thumbed through an old book (Knaster's?) to implement
  1668. it.  for real fun, open a plugin, and step through.  i'd rather debug the
  1669. Print Mgr.
  1670.  
  1671. +++++++++++++++++++++++++++
  1672.  
  1673. >From kempkec@multiad.com (Christopher Kempke)
  1674. Date: Wed, 13 Nov 1996 10:42:41 -0600
  1675. Organization: Multi-Ad Services, Inc.
  1676.  
  1677. chrisn+@cmu.edu (Chris Newman) wrote
  1678.  
  1679. [Snip (and there's more where that came from)]
  1680.  
  1681. > I would say the two biggest culprits are C++ and Object Oriented
  1682. > Programming (the acronym OOPS fits quite well).  You see OOPS is all the
  1683. > rage these days.  Everyone thinks it's so cool.  What does it add to the
  1684. > programming experience?  It makes programs bigger, slower, more complicated
  1685. > and harder to debug.
  1686.  
  1687. Slow, I'll acknowledge, in certain instances.  But if OOP is making your
  1688. programs bigger, more complicated, or harder to debug, you aren't doing it
  1689. right.  Code re-use and modular design are two of the big benefits of OOP.
  1690. And C++ is usually only trivially more inefficient than "pure" C, an
  1691. inefficiency that can usually be compensated for by the increased
  1692. descriptive power of the language.
  1693.  
  1694. Good object-oriented design is a learned skill.  Many C++/Java programmers
  1695. haven't learned it.  But that doesn't negate the fact that it's been years
  1696. since I heard someone seriously suggest that for the majority of programs
  1697. structural programming leads to better design or code than object-oriented
  1698. programming.  That battle's been fought and won.  The new one is to try
  1699. and find the next incremental step toward better program design.
  1700.  
  1701. There is a lot of fear among non-C++ programmers about C++'s legendary
  1702. complexity.  That complexity is largely a myth; the parts of C++ you need
  1703. to learn in order to implement good OO programs is relatively small.  Most
  1704. of the rest are syntactic games to make common tasks easier.   But nearly
  1705. every feature of C++ was added to make some programming task simpler, not
  1706. more complex.
  1707.  
  1708. > Take a look at PowerPlant.  There are so many object classes in that
  1709. > framework that it requires a "class browser" just to make heads or tails of
  1710. > it.  A simple operation can generate a chain of hundreds of do-nothing
  1711. > function calls.  Do you think the average programmer has any idea of how it
  1712. > all fits together?  I seriously doubt it.  So they end up blindly creating
  1713. > more objects which add more layers of complexity in the hopes that somehow
  1714. > things will start working.
  1715.  
  1716. And the hound dog howls at midnight.   This paragraph has nothing to do
  1717. with the previous one.   OOP != Frameworks.  Frameworks are a common type
  1718. programming tool, and they're often implemented in OO languages, but
  1719. there's nothing requiring that.  There are plenty of non-OOP frameworks,
  1720. and plenty of OOP ones written in languages other than C++.
  1721.  
  1722. But to answer your points anyway:  Lots of people programming in
  1723. Powerplant before the class browser even existed.   If you're using a
  1724. class browser as a substitute for learning the framework, you're already
  1725. at a disadvantage.
  1726.  
  1727. I dare you to point me to ANY "simple operation" in Powerplant or any
  1728. other well-designed framework that "generates a chain of hundreds of
  1729. do-nothing function calls."  Sure, you can build such a thing (in any
  1730. language).  But it
  1731. wouldn't make any sense to.
  1732.  
  1733. Yes, I believe the average Powerplant programmer has a very good idea how
  1734. it all fits together. If it didn't simplify the programming process, why
  1735. would people use it?  You claim that there are all sorts of program which
  1736. have been bloated by frameworks -- they were all constructed by randomly
  1737. slapping objects into a framework nobody could understand?  I think you
  1738. jest.  The fact that frame-work generated programs are popular would seem
  1739. to put the lie to that statement.
  1740.  
  1741. And now if I can pull out the strong words: "So they end up blindly
  1742. creating more objects which add more layers of complexity in the hopes
  1743. that somehow things will start working."
  1744.  
  1745. Let me be blunt.  Anyone who programs this way is either a beginner or an
  1746. idiot.  Anyone who pays people to program this way is either ignorant of
  1747. the programming process or an idiot.
  1748.  
  1749. I believe (and I mean no disrespect) that you don't understand
  1750. Object-Oriented programming, and that you are making the common human
  1751. assumption that things you don't understand must be stupid, needlessly
  1752. complicated, or useless.   However, just because this belief pattern is
  1753. common doesn't make it true.
  1754.  
  1755. --Chris
  1756.  
  1757. -- 
  1758. Christopher Kempke, kempkec@multiad.com
  1759. Sr. Software Architect, Multi-Ad Services Inc.
  1760. (I do not speak for my company, profession, or species)
  1761.  
  1762. +++++++++++++++++++++++++++
  1763.  
  1764. >From chrisn+@cmu.edu (Chris Newman)
  1765. Date: Tue, 12 Nov 1996 23:00:31 -0800
  1766. Organization: Altopia Corp. - Affordable Usenet Access - http://www.alt.net
  1767.  
  1768. In article <1996110615483251928@rhrz-ts3-p8.rhrz.uni-bonn.de>,
  1769. uzs90z@uni-bonn.de (Michael Schuerig) wrote:
  1770. >Or, looking elsewhere, at the stuff that appears daily on info-mac. I'm
  1771. >really astonished by the RAM and disk footprint of some newly written
  1772. >applications that only have remarkably few features. Is this the result
  1773. >of carelessness? Anyway, we all know that memory (disk/RAM) is cheap? Or
  1774. >just a rational decision, as it would have required so much more effort
  1775. >to use less resources? What's the place of frameworks (MacApp, TCL,
  1776. >PowerPlant) in this game?
  1777.  
  1778. I would say the two biggest culprits are C++ and Object Oriented
  1779. Programming (the acronym OOPS fits quite well).  You see OOPS is all the
  1780. rage these days.  Everyone thinks it's so cool.  What does it add to the
  1781. programming experience?  It makes programs bigger, slower, more complicated
  1782. and harder to debug.
  1783.  
  1784. Take a look at PowerPlant.  There are so many object classes in that
  1785. framework that it requires a "class browser" just to make heads or tails of
  1786. it.  A simple operation can generate a chain of hundreds of do-nothing
  1787. function calls.  Do you think the average programmer has any idea of how it
  1788. all fits together?  I seriously doubt it.  So they end up blindly creating
  1789. more objects which add more layers of complexity in the hopes that somehow
  1790. things will start working.
  1791.  
  1792. If Mac programmers really want to make the Macintosh wonderful we should
  1793. throw out our C++ and OOPS garbage and start writing clean simple
  1794. well-modularized programs from scratch.  A framework shouldn't add 100K or
  1795. 1MB of overhead and slow down the program.  It should cost 20K or 10K and
  1796. make it easy to write fast programs.
  1797.  
  1798. Just to show that I practice what I preach, feel free to check out
  1799. NiftyTelnet <http://andrew2.andrew.cmu.edu/dist/niftytelnet.html>.  Oh, I'm
  1800. not closed minded so I'll admit that on rare occasions, objects are useful. 
  1801. NiftyTelnet has 2 object types, implemented in vanilla C.
  1802.  
  1803. Sorry if I sound like I'm preaching, but it's an uphill battle fighting
  1804. against the OOPS propaganda machine.
  1805.  
  1806.                 - Chris Newman
  1807.  
  1808. +++++++++++++++++++++++++++
  1809.  
  1810. >From BHuey@worldnet.att.net (Hugh Johnson)
  1811. Date: Wed, 13 Nov 1996 23:08:33 -0500
  1812. Organization: AT&T WorldNet Services
  1813.  
  1814. In article <kempkec-1311961042410001@news.orbis.net>, kempkec@multiad.com
  1815. (Christopher Kempke) wrote:
  1816. > Slow, I'll acknowledge, in certain instances.  But if OOP is making your
  1817. > programs bigger, more complicated, or harder to debug, you aren't doing it
  1818. > right.  Code re-use and modular design are two of the big benefits of OOP.
  1819. > And C++ is usually only trivially more inefficient than "pure" C, an
  1820. > inefficiency that can usually be compensated for by the increased
  1821. > descriptive power of the language.
  1822. > Good object-oriented design is a learned skill.  Many C++/Java programmers
  1823. > haven't learned it.  But that doesn't negate the fact that it's been years
  1824. > since I heard someone seriously suggest that for the majority of programs
  1825. > structural programming leads to better design or code than object-oriented
  1826. > programming.  That battle's been fought and won.  The new one is to try
  1827. > and find the next incremental step toward better program design.
  1828. >  
  1829. > There is a lot of fear among non-C++ programmers about C++'s legendary
  1830. > complexity.  That complexity is largely a myth; the parts of C++ you need
  1831. > to learn in order to implement good OO programs is relatively small.  Most
  1832. > of the rest are syntactic games to make common tasks easier.   But nearly
  1833. > every feature of C++ was added to make some programming task simpler, not
  1834. > more complex.
  1835.  
  1836. Read Richard Gabriel's "Patterns of Software". It'll change your mind
  1837. about OOP. I use a lot of objects myself, but I definitely do _not_ define
  1838. everything as a class (nor do I even try to). I try to do everything in
  1839. ".cp" (C++) files, just because the C++ compiler is better at
  1840. type-checking and a few other things, but mostly I'd say my code is more
  1841. than half plain vanilla C. I've stopped using references, even though I
  1842. learned to code with references. Pointers are _much_ easier to understand
  1843. at a glance.
  1844.  
  1845. What it all boils down to, as Gabriel said in his book, is that we as
  1846. programmers have to "live in" our code; we have to continually upgrade it
  1847. and squash bugs and so forth, so it's never a finished product. It has to
  1848. be "habitable", like a cozy farmhouse that you add new rooms onto when
  1849. your family grows. The big architecture model, in opposition to that, just
  1850. plain sucks. Reusability between projects is largely a myth. Reusablity is
  1851. only correctly applied within a given project, where your custom-made
  1852. objects allow customized expansion.
  1853.  
  1854. Just my 2¢.
  1855.  
  1856. -- 
  1857. The universe is a figment of it's own imagination.
  1858.  
  1859. +++++++++++++++++++++++++++
  1860.  
  1861. >From nakaaran@micronet.fr (Alain Bertrand)
  1862. Date: Sun, 17 Nov 1996 10:21:01 +0100
  1863. Organization: Francenet -- Paris, France
  1864.  
  1865. Ed Anson <tulip@tiac.net> wrote:
  1866.  
  1867.  
  1868.  
  1869.  
  1870. > >But I'd go further and say that while good modular design is
  1871. > > fairly easy to learn, good object-oriented design is much harder.  OOPS is
  1872. > > a plot to make programming harder for the average joe.
  1873. > The average joe doesn't program commercial applications. OOPS is a
  1874. > technology to make difficult programs easier for a skilled programmer, and
  1875. > to make otherwise intractable programming tasks manageable. If that
  1876. > requires a bit more learning -- then so be it. The average joe can still
  1877. > program toy programs in toy languages, and OOPS won't get in his way.
  1878.  
  1879. I'm an average joe programmer and I do feel that getting the code with
  1880. the data (e.g. OOP) makes my joe programming far easier that modular
  1881. design. I like multiple inheritance too because I can slice my problems
  1882. into small parts that I can test separately and be sure that they will
  1883. behave correctly when put into the same program. Why do you need to
  1884. pretend that OOP is more difficult? Did you learn it when you where
  1885. already close to retirement :=)?
  1886. -- 
  1887. Alain Bertrand
  1888. nakaaran@micronet.fr
  1889.  
  1890. +++++++++++++++++++++++++++
  1891.  
  1892. >From lars.farm@ite.mh.se (Lars Farm)
  1893. Date: Sat, 16 Nov 1996 14:24:35 +0100
  1894. Organization: pv
  1895.  
  1896. Chris Newman <chrisn+@cmu.edu> wrote:
  1897.  
  1898. > If you have to call a procedure through a function pointer rather than
  1899. > directly, it's significantly slower.
  1900.  
  1901. Compare to what you'd do in C in similar situations:
  1902.  
  1903. C:
  1904.   enum kind { rect, circle, triangle };
  1905.  
  1906.   struct Shape { kind tag; ... };
  1907.  
  1908.   void draw_shapes( Shape*shapes, int N ) {
  1909.     for ( int i = 0 ; i < N ; i++ )
  1910.       switch ( shapes[i].tag ) {
  1911.         case rect:     draw_rect( shapes+i );     break;
  1912.         case circle:   draw_circle( shapes+i );   break;
  1913.         case triangle: draw_triangle( shapes+i ); break;
  1914.         default:
  1915.            ... oops some moron invented a new shape ...
  1916.            abort();
  1917.            break;
  1918.       }
  1919.    }
  1920. As you can see there is a price to pay even without function pointers.
  1921. (1) Not (easily) extendable. (2) Inspect each shape and select the
  1922. proper routine at runtime.
  1923.  
  1924. C++:
  1925.   struct Shape { virtual void draw() = 0; };
  1926.  
  1927.   void draw_shapes( const ShapeArray& shapes ) {
  1928.     for ( ShapeIter p = shapes.begin(); p != shapes.end(); ++p )
  1929.        p->draw();    // any kind of shape.
  1930.   }                  // including the ones not yet invented
  1931.  
  1932. If you don't need polymorphic behaviour, don't use virtual. If you need
  1933. it, you'd have to pay the price in C or Pascal too.
  1934.  
  1935. > And then there's multiple inheritance
  1936. > -- a great bain of efficient programming.
  1937.  
  1938. Why?
  1939.  
  1940. >  Plus there's the data losing
  1941. > problem (data hiding taken too far) which leads to function calls which set
  1942. > one variable.
  1943.  
  1944. inline
  1945.  
  1946. As for OOP and frameworks. They are different beasts. 
  1947.  
  1948. A framework tries to be everything for everyone and tends to become a
  1949. compromise for everyone and optimal for no one. They do too much. They
  1950. grow throughout their lifetime, they never shrink and they eventually
  1951. become bloated, interconnected and tangled.
  1952.  
  1953. > I'm not at all afraid of C++, except for the bloat and inefficiency it
  1954. > would add to my code.
  1955.  
  1956. C++ or OOP doesn't cause bloat. Bad design does. Frameworks are designed
  1957. partly by its designers, partly by these newsgroups and partly by
  1958. important customers, by making multiple and diverse feature requests
  1959. that are accepted. 
  1960.  
  1961. The only feature requests that are consistently rejected are the ones
  1962. that ask for a smaller framework because a shrinking feature list
  1963. doesn't look good to marketing or the designers in charge. Many users of
  1964. frameworks have no need for many features in a particular framework, but
  1965. it is there anyway. 
  1966.  
  1967. This is market forces at work combined with design decisions and project
  1968. management. It has very little to do with OOP or C++.
  1969.  
  1970. > Of course PowerPlant simplifies the programming process -- it would take a
  1971. > bright person at least a couple months to discover and understand all the
  1972. > OS incantations necessary to start an app and set up an event loop
  1973. > according to the HIG.  But PowerPlant/TCL certainly doesn't simplify the
  1974. > resulting program.
  1975.  
  1976. This is the compromise of frameworks, not the price of OOP. For many the
  1977. advantages of a framework far outweighs the disadvantages.
  1978.  
  1979.  
  1980. -- 
  1981. Lars Farm, lars.farm@ite.mh.se
  1982.  
  1983. +++++++++++++++++++++++++++
  1984.  
  1985. >From tulip@tiac.net (Ed Anson)
  1986. Date: Sat, 16 Nov 1996 14:21:53 -0500
  1987. Organization: Tulip Software
  1988.  
  1989. OOP doesn't cause bloat. It can help avoid it.
  1990.  
  1991. In article <chrisn+-ya023080001611960052210001@news.alt.net>,
  1992. chrisn+@cmu.edu (Chris Newman) wrote:
  1993.  
  1994. > If you have to call a procedure through a function pointer rather than
  1995. > directly, it's significantly slower.  And then there's multiple inheritance
  1996. > -- a great bain of efficient programming.  Plus there's the data losing
  1997. > problem (data hiding taken too far) which leads to function calls which set
  1998. > one variable.
  1999.  
  2000. A good compiler implements a call via a pointer only for a virtual method,
  2001. so the performance penalty only applies when you need the capability. The
  2002. posix code you mention below also uses pointers to dispatch calls. It just
  2003. does it the hard way instead of using the built-in dispatching of C++. (I
  2004. recently found myself putting a class wrapper around part of it in order
  2005. to get the flexibility I needed without adding enormous amounts of code.)
  2006.  
  2007. And if you need a function that just sets one variable (not a common thing
  2008. in good OO design) then an in-line procedure does the trick with no
  2009. overhead and a cleaner design IMNSHO.
  2010.  
  2011. > Modular design doesn't require OOP.  In fact modular design is often better
  2012. > *without* OOP.  If I have a sophisticated structure and there are several
  2013. > different sets of operations I apply to it -- I can put those operations in
  2014. > sepearte modules.  With OOP and "the functions must go with the object"
  2015. > dogma, you're stuck with one big module.  As for code re-use, I'd say that
  2016. > the standard C and posix libraries have been more successful than *any* OOP
  2017. > object.
  2018.  
  2019. Indeed, you can do OO programming with C. It's just harder. In fact, I did
  2020. object oriented design for a decade or so before C++ became available to
  2021. me. When it became available, it was a great help because it relieved me
  2022. of many details and made things feasible that I wouldn't attempt with C.
  2023.  
  2024. > The libraries tend to be much bigger.  And the overhead to manage some of
  2025. > the more complicated inheritance features is very significant.  The only
  2026. > significant things C++ can do which C can't trivially is multiple
  2027. > inheritance, inline functions and exceptions.  I'll admit the latter two
  2028. > are useful.
  2029.  
  2030. Application frameworks tend to be fairly large. That is only because they
  2031. cover a lot more ground than the C skeletons they replace. They can do
  2032. that because of the added flexibility OO provides. A good framework (e.g.,
  2033. PowerPlant) doesn't require you to include the parts that aren't needed by
  2034. your application. The framework accounts for only a tiny fraction of the
  2035. code in a typical commercial application.
  2036.  
  2037. >But I'd go further and say that while good modular design is
  2038. > fairly easy to learn, good object-oriented design is much harder.  OOPS is
  2039. > a plot to make programming harder for the average joe.
  2040.  
  2041. The average joe doesn't program commercial applications. OOPS is a
  2042. technology to make difficult programs easier for a skilled programmer, and
  2043. to make otherwise intractable programming tasks manageable. If that
  2044. requires a bit more learning -- then so be it. The average joe can still
  2045. program toy programs in toy languages, and OOPS won't get in his way.
  2046.  
  2047. > It's been years since I heard someone seriously suggest that the Macintosh
  2048. > market would replace Windows.  That battle's been fought and won.  But it
  2049. > doesn't mean the right side won.  I like going with the underdog when it's
  2050. > better.  :-)
  2051.  
  2052. You seem to have your chronology mixed up. It is Windows that is trying to
  2053. replace the Macintosh. From a marketing standpoint, it seems to be doing
  2054. fairly well. Otherwise, I agree with you. So what?
  2055.  
  2056. > I'm not at all afraid of C++, except for the bloat and inefficiency it
  2057. > would add to my code.  Exceptions and inline functions are nice, multiple
  2058. > inheritance sucks, and a lot of the syntactic sugar ends up simply
  2059. > obfuscating the code.
  2060.  
  2061. You contradict yourself here. Exceptions are a powerful tool for making
  2062. code more compact. Although inline functions sometimes make code larger,
  2063. they also tend to make it more efficient. They can (in many cases)
  2064. actually make the code smaller. Multiple inheritance is best used
  2065. sparingly, but when appropriate it can also simplify the code and (YES)
  2066. make it more compact. I have experienced these results through years of
  2067. C++ programming. As for syntactic sugar: it's sugar only if it's sweet. I
  2068. tend to ignore large parts of C++ because they are arcane and have nothing
  2069. to do with OOP.
  2070.  
  2071. > When I studied PowerPlant/TCL I recall all sorts of "message dispatchers"
  2072. > which sent messages down a complex chain of objects.  The mostly-non-OOP
  2073. > framework I wrote for myself sends the event directly to the window
  2074. > procedure that handles it.
  2075.  
  2076. The message dispatchers are actually a simplifying pattern. If your own
  2077. event dispatcher knows (without any looking around) exactly which
  2078. procedure needs to handle each event, then your program is either
  2079. extremely simple or your event dispatcher has been customized beyond
  2080. belief. Message dispatching tends to greatly reduce the size and
  2081. complexity of an otherwise large and complex program. It is basically an
  2082. organized way of locating the correct handler (out of the many available)
  2083. for a particular event. In a really simple program, you can generally
  2084. override the event handling methods and handle events directly.
  2085.  
  2086.  
  2087. > I've seen this happen far too often.  It'd be better to train people with
  2088. > simple modular design and OOP as an "advanced topic".  I'm a strong
  2089. > believer in the K.I.S.S. principle.
  2090.  
  2091. For really simple programs (as typically encountered by beginners and
  2092. students), there is really very little difference between OOP and a simple
  2093. modular design. Perhaps beginners needn't learn all the intricacies of OOP
  2094. right away, but professional programmers need to use OOP to do real work.
  2095. Today's software applications are far too complex to manage efficiently
  2096. without it.
  2097.  
  2098.  
  2099.  
  2100. OOP and frameworks don't cause bloat. My experience has been somewhat the
  2101. opposite. For example, I recently took an application written in C. I
  2102. totally rewrote it using PowerPlant and C++. I roughly doubled its feature
  2103. set. When I got done I had a more useful program with fewer bugs and a
  2104. more responsive user interface. And how much did I increase the memory
  2105. requirements? None at all. The new program has the same system
  2106. requirements as the old one.
  2107.  
  2108. So what is the real cause of program bloat?
  2109.  
  2110. Actually, there are many causes, and they do not result from OOP. Too many
  2111. programmers pay too little attention to memory management. They add
  2112. features as appendages instead of integrating them into a coherent
  2113. architecture as OOP would enable them to do. In short, program bloat
  2114. happens because customers accept it and programmers typically have neither
  2115. the skill nor the incentive to avoid it. After all, memory is getting
  2116. cheaper :-)
  2117.  
  2118. - --------------------
  2119. Ed Anson
  2120. Tulip Software
  2121. Andover, MA 01810
  2122. U.S.A.              <http://www.tiac.net/users/tulip/home.html>
  2123.  
  2124. +++++++++++++++++++++++++++
  2125.  
  2126. >From Bruce@hoult.actrix.gen.nz (Bruce Hoult)
  2127. Date: Mon, 18 Nov 1996 19:18:20 +1200
  2128. Organization: (none)
  2129.  
  2130. chrisn+@cmu.edu (Chris Newman) writes:
  2131. > >[OOP is] Slow, I'll acknowledge, in certain instances.
  2132. >
  2133. > If you have to call a procedure through a function pointer rather than
  2134. > directly, it's significantly slower.
  2135.  
  2136. If you know exactly which function you want to call then you can call it
  2137. directly, even if it's virtual.  If you don't know exactly which function
  2138. you will want to call then you'll have to handle exactly the same problem
  2139. in a non-OOP language, via either a manually set up function pointer or
  2140. a switch statement.  The better-written non-OOP programs use function
  2141. pointers.  C++ simply automates the bookkeeping for you.
  2142.  
  2143.  
  2144. > And then there's multiple inheritance -- a great bain of efficient
  2145. > programming.
  2146.  
  2147. If you don't need it then don't use it -- and hen it doesn't cost you
  2148. anything.  If you do need that sort of capability in a non-OOP language
  2149. then you're going to have to do a *lot* of manual work to duplicate it.
  2150.  
  2151.  
  2152. > Plus there's the data losing problem (data hiding taken too far) which
  2153. > leads to function calls which set one variable.
  2154.  
  2155. No one's forcing you to do that.  And even if you want to write it in
  2156. functional form instead of as an assignment, inlining (which you admit
  2157. to liking) will get back the efficiency for you.
  2158.  
  2159.  
  2160. > >But if OOP is making your
  2161. > >programs bigger, more complicated, or harder to debug, you aren't doing it
  2162. > >right.  Code re-use and modular design are two of the big benefits of OOP.
  2163. >
  2164. > Modular design doesn't require OOP.  In fact modular design is often better
  2165. > *without* OOP.
  2166.  
  2167. So don't use OOP in those cases.  There are other cases where OOP *is* the best
  2168. way to do things.
  2169.  
  2170.  
  2171. > If I have a sophisticated structure and there are several
  2172. > different sets of operations I apply to it -- I can put those operations in
  2173. > sepearte modules.  With OOP and "the functions must go with the object"
  2174. > dogma, you're stuck with one big module.
  2175.  
  2176. That's not a limitation of OOP, but only of C++.  Other OOP languages such
  2177. as Lisp/CLOS and Dylan don't suffer from it.
  2178.  
  2179.  
  2180. > As for code re-use, I'd say that the standard C and posix libraries have
  2181. > been more successful than *any* OOP object.
  2182.  
  2183. C and Unix have been around for 20+ years.  When I first used it, in 1981,
  2184. the C standard library, wasn't.  Just watch STL in ten years time.
  2185.  
  2186.  
  2187. > >And C++ is usually only trivially more inefficient than "pure" C, an
  2188. > >inefficiency that can usually be compensated for by the increased
  2189. > >descriptive power of the language.
  2190. >
  2191. > The libraries tend to be much bigger.
  2192.  
  2193. Not if they have the same functionality.
  2194.  
  2195.  
  2196. > And the overhead to manage some of the more complicated inheritance
  2197. > features is very significant.
  2198.  
  2199. So if you don't need thos capabilities then don't use those facilities
  2200. and they will cost you nothing.  If you *do* want thase capabilities, and
  2201. are using a non-OOP language then you will have a *lot* of tedious manual
  2202. work ahead of you.  And probably do it less well than your C++ compiler
  2203. vendor.
  2204.  
  2205.  
  2206. > The only significant things C++ can do which C can't trivially is multiple
  2207. > inheritance, inline functions and exceptions.  I'll admit the latter two
  2208. > are useful.
  2209.  
  2210. And templates.  Sure you can hack a similar thing using macros, but then
  2211. that's even *more* true of inline functions, which you accept as useful.
  2212.  
  2213.  
  2214. > >Good object-oriented design is a learned skill.  Many C++/Java programmers
  2215. > >haven't learned it.
  2216. >
  2217. > Agreed.  But I'd go further and say that while good modular design is
  2218. > fairly easy to learn, good object-oriented design is much harder.  OOPS is
  2219. > a plot to make programming harder for the average joe.
  2220.  
  2221. You've got some sort of a point there.  That's why there's Visual Basic for
  2222. the average Joe.  OOP was designed by good programmers, to make their own
  2223. work easier.  If it doesn't make life easier for poor or average programmers
  2224. -- well, that's too bad, I guess.
  2225.  
  2226. -- Bruce
  2227.  
  2228. --
  2229. ...in 1996, software marketers wore out a record 31,296 copies of Roget's
  2230. Thesaurus searching for synonyms to the word "coffee" ...
  2231.  
  2232. +++++++++++++++++++++++++++
  2233.  
  2234. >From chrisn+@cmu.edu (Chris Newman)
  2235. Date: Sat, 16 Nov 1996 00:52:21 -0800
  2236. Organization: Altopia Corp. - Affordable Usenet Access - http://www.alt.net
  2237.  
  2238. In article <kempkec-1311961042410001@news.orbis.net>, kempkec@multiad.com
  2239. (Christopher Kempke) wrote:
  2240.  
  2241. >chrisn+@cmu.edu (Chris Newman) wrote
  2242. >
  2243. >[Snip (and there's more where that came from)]
  2244.  
  2245. Hah!  You fell for my bait -- I'm always up for a good intellectual battle. :-)
  2246.  
  2247. >[OOP is] Slow, I'll acknowledge, in certain instances.
  2248.  
  2249. If you have to call a procedure through a function pointer rather than
  2250. directly, it's significantly slower.  And then there's multiple inheritance
  2251. -- a great bain of efficient programming.  Plus there's the data losing
  2252. problem (data hiding taken too far) which leads to function calls which set
  2253. one variable.
  2254.  
  2255. >But if OOP is making your
  2256. >programs bigger, more complicated, or harder to debug, you aren't doing it
  2257. >right.  Code re-use and modular design are two of the big benefits of OOP.
  2258.  
  2259. Modular design doesn't require OOP.  In fact modular design is often better
  2260. *without* OOP.  If I have a sophisticated structure and there are several
  2261. different sets of operations I apply to it -- I can put those operations in
  2262. sepearte modules.  With OOP and "the functions must go with the object"
  2263. dogma, you're stuck with one big module.  As for code re-use, I'd say that
  2264. the standard C and posix libraries have been more successful than *any* OOP
  2265. object.
  2266.  
  2267. >And C++ is usually only trivially more inefficient than "pure" C, an
  2268. >inefficiency that can usually be compensated for by the increased
  2269. >descriptive power of the language.
  2270.  
  2271. The libraries tend to be much bigger.  And the overhead to manage some of
  2272. the more complicated inheritance features is very significant.  The only
  2273. significant things C++ can do which C can't trivially is multiple
  2274. inheritance, inline functions and exceptions.  I'll admit the latter two
  2275. are useful.
  2276.  
  2277. >Good object-oriented design is a learned skill.  Many C++/Java programmers
  2278. >haven't learned it.
  2279.  
  2280. Agreed.  But I'd go further and say that while good modular design is
  2281. fairly easy to learn, good object-oriented design is much harder.  OOPS is
  2282. a plot to make programming harder for the average joe.
  2283.  
  2284. > But that doesn't negate the fact that it's been years
  2285. >since I heard someone seriously suggest that for the majority of programs
  2286. >structural programming leads to better design or code than object-oriented
  2287. >programming.  That battle's been fought and won.
  2288.  
  2289. It's been years since I heard someone seriously suggest that the Macintosh
  2290. market would replace Windows.  That battle's been fought and won.  But it
  2291. doesn't mean the right side won.  I like going with the underdog when it's
  2292. better.  :-)
  2293.  
  2294. >There is a lot of fear among non-C++ programmers about C++'s legendary
  2295. >complexity.  That complexity is largely a myth; the parts of C++ you need
  2296. >to learn in order to implement good OO programs is relatively small.  Most
  2297. >of the rest are syntactic games to make common tasks easier.   But nearly
  2298. >every feature of C++ was added to make some programming task simpler, not
  2299. >more complex.
  2300.  
  2301. I'm not at all afraid of C++, except for the bloat and inefficiency it
  2302. would add to my code.  Exceptions and inline functions are nice, multiple
  2303. inheritance sucks, and a lot of the syntactic sugar ends up simply
  2304. obfuscating the code.
  2305.  
  2306. >I dare you to point me to ANY "simple operation" in Powerplant or any
  2307. >other well-designed framework that "generates a chain of hundreds of
  2308. >do-nothing function calls."  Sure, you can build such a thing (in any
  2309. >language).  But it wouldn't make any sense to.
  2310.  
  2311. When I studied PowerPlant/TCL I recall all sorts of "message dispatchers"
  2312. which sent messages down a complex chain of objects.  The mostly-non-OOP
  2313. framework I wrote for myself sends the event directly to the window
  2314. procedure that handles it.
  2315.  
  2316. >Yes, I believe the average Powerplant programmer has a very good idea how
  2317. >it all fits together. If it didn't simplify the programming process, why
  2318. >would people use it?
  2319.  
  2320. Of course PowerPlant simplifies the programming process -- it would take a
  2321. bright person at least a couple months to discover and understand all the
  2322. OS incantations necessary to start an app and set up an event loop
  2323. according to the HIG.  But PowerPlant/TCL certainly doesn't simplify the
  2324. resulting program.
  2325.  
  2326. >The fact that frame-work generated programs are popular would seem
  2327. >to put the lie to that statement.
  2328.  
  2329. Windows is more popular than the Mac.  Querty is more popular than Dvorak. 
  2330. The popular is not always the better -- often it's just the better
  2331. propaganda.
  2332.  
  2333. >And now if I can pull out the strong words: "So they end up blindly
  2334. >creating more objects which add more layers of complexity in the hopes
  2335. >that somehow things will start working."
  2336. >
  2337. >Let me be blunt.  Anyone who programs this way is either a beginner or an
  2338. >idiot.  Anyone who pays people to program this way is either ignorant of
  2339. >the programming process or an idiot.
  2340.  
  2341. I've seen this happen far too often.  It'd be better to train people with
  2342. simple modular design and OOP as an "advanced topic".  I'm a strong
  2343. believer in the K.I.S.S. principle.
  2344.  
  2345. >I believe (and I mean no disrespect) that you don't understand
  2346. >Object-Oriented programming, and that you are making the common human
  2347. >assumption that things you don't understand must be stupid, needlessly
  2348. >complicated, or useless.
  2349.  
  2350. A reasonable assumption, but incorrect.  I believe I have a very good
  2351. understanding of OOP and how/when to use those techniques.  It is a very
  2352. powerful tool which should only be used when necessary.  There's no need to
  2353. use a $200 spreadsheet when a $10 calculator will do the job.
  2354.  
  2355.                 Cheers,
  2356.                 - Chris
  2357.  
  2358. +++++++++++++++++++++++++++
  2359.  
  2360. >From chrisn+@cmu.edu (Chris Newman)
  2361. Date: Mon, 18 Nov 1996 23:33:10 -0800
  2362. Organization: Altopia Corp. - Affordable Usenet Access - http://www.alt.net
  2363.  
  2364. In article <tulip-1611961421530001@tulip.tiac.net>, tulip@tiac.net (Ed
  2365. Anson) wrote:
  2366.  
  2367. >A good compiler implements a call via a pointer only for a virtual method,
  2368. >so the performance penalty only applies when you need the capability.
  2369.  
  2370. That's fine, except most programmers use virtual methods most of the time,
  2371. thinking it may be useful to plug in something else at a later date, even
  2372. if they never do so.
  2373.  
  2374. >Application frameworks tend to be fairly large. That is only because they
  2375. >cover a lot more ground than the C skeletons they replace. They can do
  2376. >that because of the added flexibility OO provides.
  2377.  
  2378. Flexibility comes at the expense of efficiency.  Every layer of indirection
  2379. makes a program less efficient and OOP design encourages more layering.
  2380.  
  2381. >The framework accounts for only a tiny fraction of the
  2382. >code in a typical commercial application.
  2383.  
  2384. True, but not an excuse to waste between 100K and 1MB on a framework.  When
  2385. programmers forget to worry about the 100K of unnecessary overhead that a
  2386. particular piece adds, the waste accumulates and adds up to bloat.
  2387.  
  2388. >The average joe doesn't program commercial applications. OOPS is a
  2389. >technology to make difficult programs easier for a skilled programmer, and
  2390. >to make otherwise intractable programming tasks manageable. If that
  2391. >requires a bit more learning -- then so be it. The average joe can still
  2392. >program toy programs in toy languages, and OOPS won't get in his way.
  2393.  
  2394. I'm quite happy writing my telnet client in a "toy language" like C.  Funny
  2395. how I can do things that most other programmers find too difficult, like
  2396. fully asynchronous network I/O without threads.  C++ allows people to
  2397. pretend they're doing good modular design when they're really turning their
  2398. project into an intractible mess of objects and inheritance.  Of course,
  2399. the old maxim goes "any problem can be fixed by another level of
  2400. indirection."
  2401.  
  2402. >For really simple programs (as typically encountered by beginners and
  2403. >students), there is really very little difference between OOP and a simple
  2404. >modular design. Perhaps beginners needn't learn all the intricacies of OOP
  2405. >right away, but professional programmers need to use OOP to do real work.
  2406. >Today's software applications are far too complex to manage efficiently
  2407. >without it.
  2408.  
  2409. I'm completely unimpressed with your haughtiness.  I know of some extremely
  2410. sophisticated and complex commercial systems that are almost entirely
  2411. non-object oriented.  Modular design is what makes a program manageable,
  2412. OOP has nothing to do with it.  OOP hinders managability to the extent that
  2413. it discourages multiple modules performing different functions on the same
  2414. data object.  In addition, complex inheritance makes it much harder to keep
  2415. track of how a change in one data structure or method will effect other
  2416. parts of the system.
  2417.  
  2418. For your information, I'm a professional Internet protocol designer and
  2419. programmer.  You're welcome to check out my program, NiftyTelnet
  2420. <http://andrew2.andrew.cmu.edu/dist/niftytelnet.html> that I wrote for fun. 
  2421. For my real job I do much larger and more sophisticated programs all in C.
  2422.  
  2423. >OOP and frameworks don't cause bloat. My experience has been somewhat the
  2424. >opposite. For example, I recently took an application written in C. I
  2425. >totally rewrote it using PowerPlant and C++. I roughly doubled its feature
  2426. >set. When I got done I had a more useful program with fewer bugs and a
  2427. >more responsive user interface. And how much did I increase the memory
  2428. >requirements? None at all. The new program has the same system
  2429. >requirements as the old one.
  2430.  
  2431. I would claim it was the act of re-writing which resulted in the
  2432. improvement.  Re-writing (and more importantly re-designing) code from
  2433. scratch elmininates all the "feature appendage" bloat.
  2434.  
  2435. >Too many
  2436. >programmers pay too little attention to memory management. They add
  2437. >features as appendages instead of integrating them into a coherent
  2438. >architecture as OOP would enable them to do. In short, program bloat
  2439. >happens because customers accept it and programmers typically have neither
  2440. >the skill nor the incentive to avoid it. After all, memory is getting
  2441. >cheaper :-)
  2442.  
  2443. I agree, on the condition that you strike the words "as OOP ... to do".  A
  2444. coherent architecture does not require OOP.
  2445.  
  2446.                 - Chris Newman
  2447.  
  2448. +++++++++++++++++++++++++++
  2449.  
  2450. >From Joshua C Horan <horan+@andrew.cmu.edu>
  2451. Date: Wed,  6 Nov 1996 11:08:02 -0500
  2452. Organization: Freshman, MCS Undeclared, Carnegie Mellon, Pittsburgh, PA
  2453.  
  2454. >There are several applications that are rather infamous for their
  2455. >resource appetite. In some cases such Word 6.0 the reasons seem quite
  2456. >obvious, as it contains a port of a half Windows. But what about
  2457. >Netscape Navigator 3.0? As it seems it's written using PowerPlant and
  2458. >therefore I guess at least somewhat Mac-like -- nevertheless it eats up
  2459. >about 9MB of RAM. Why?
  2460. >Or, looking elsewhere, at the stuff that appears daily on info-mac. I'm
  2461. >really astonished by the RAM and disk footprint of some newly written
  2462. >applications that only have remarkably few features. Is this the result
  2463. >of carelessness? Anyway, we all know that memory (disk/RAM) is cheap? Or
  2464. >just a rational decision, as it would have required so much more effort
  2465. >to use less resources? What's the place of frameworks (MacApp, TCL,
  2466. >PowerPlant) in this game?
  2467. >Wondering,
  2468. Michael
  2469.  
  2470. I was just using Netscape 2.02 the other day and it kept complaining
  2471. about not having enough memory even with a 9 MB partition!  Good thing I
  2472. wasn't using 3.0 otherwise it would need 11 MB!  Besides who can run 3.0
  2473. for more than 3 minutes  without discovering it's special "crash or
  2474. freeze the computer" feature?
  2475. Anyway, I used ZoneRanger to take a look at the Netscape heap and it was
  2476. a complete mess!  There were pointers all over the place and handles
  2477. locked in the middle of the heap.  This was the worst memory management
  2478. I've seen in a while.  Maybe we should inform the Netscape developers
  2479. that pointers go at the *bottom* of the heap and that there is this neat
  2480. HLockHi() function, or while we're at it how about: DisposePtr(),
  2481. HUnlock(), HPurge().
  2482.  
  2483. Anyone else feel up to some Netscape Bashing?
  2484.  
  2485. Josh Horan 
  2486.  
  2487. +++++++++++++++++++++++++++
  2488.  
  2489. >From Mephisto <mwehner@lander.es>
  2490. Date: Tue, 19 Nov 96 16:59:05 -0500
  2491. Organization: Lander Internet
  2492.  
  2493. Hi!
  2494.  
  2495. I just wanted to send some comments regarding C++ programming:
  2496. I definitely agree with one fact: large frameworks like the TCL are 
  2497. *ABSOLUTELY* useless!
  2498. I'm using the Symantec Compiler, but I was shocked when I saw how large 
  2499. applications got with the Visual Architect! (basic size is about 500K! 
  2500. for just a simple window saying "Hi!")
  2501. It is a neat tool, but the size of the compiled projects just is 
  2502. ridiculous!
  2503. But this doesn't mean you have to condemn the whole architecture of C++, 
  2504. though.
  2505. I LOVE it! I think the possiblities of this language are marvellous!
  2506. And you don't have to stick to pre-programmed frameworks!
  2507. I wrote my own "framework" - and it creates reasonable-sized 
  2508. applications: the minimum size is about 30K! I don't think you gain that 
  2509. much by programming in C!
  2510. So that's just it - my personal opinion is that C++ has some major 
  2511. advantages: I don't know about what it does to memory - I guess this IS 
  2512. a mess sometimes: but if you know how to handle pointers correctly you 
  2513. can get it under control!
  2514.  
  2515.             Mephisto  (mwehner@lander.es)
  2516.  
  2517. +++++++++++++++++++++++++++
  2518.  
  2519. >From chrisn+@cmu.edu (Chris Newman)
  2520. Date: Mon, 18 Nov 1996 23:48:53 -0800
  2521. Organization: Altopia Corp. - Affordable Usenet Access - http://www.alt.net
  2522.  
  2523. In article <2931189500@hoult.actrix.gen.nz>, Bruce@hoult.actrix.gen.nz
  2524. (Bruce Hoult) wrote:
  2525. >> Modular design doesn't require OOP.  In fact modular design is often better
  2526. >> *without* OOP.
  2527. >
  2528. >So don't use OOP in those cases.  There are other cases where OOP *is* the best
  2529. >way to do things.
  2530.  
  2531. There are rare cases where OOP is the best way.  Windows/Dialogs and
  2532. graphic objects come to mind as the cases where it's often useful.  Most of
  2533. the time OOP is just unnecessary complexity resulting in poor design.
  2534.  
  2535. >> And the overhead to manage some of the more complicated inheritance
  2536. >> features is very significant.
  2537. >
  2538. >So if you don't need thos capabilities then don't use those facilities
  2539. >and they will cost you nothing.  If you *do* want thase capabilities, and
  2540. >are using a non-OOP language then you will have a *lot* of tedious manual
  2541. >work ahead of you.  And probably do it less well than your C++ compiler
  2542. >vendor.
  2543.  
  2544. Capabilities which require run time support usually bloat the application
  2545. even if they're not used.  Unless the compiler is exceptionally proficient.
  2546.  
  2547. >> Agreed.  But I'd go further and say that while good modular design is
  2548. >> fairly easy to learn, good object-oriented design is much harder.  OOPS is
  2549. >> a plot to make programming harder for the average joe.
  2550. >
  2551. >You've got some sort of a point there.  That's why there's Visual Basic for
  2552. >the average Joe.  OOP was designed by good programmers, to make their own
  2553. >work easier.  If it doesn't make life easier for poor or average programmers
  2554. >-- well, that's too bad, I guess.
  2555.  
  2556. Visual Basic is a trap for Microsoft followers with no sense of aesthetics.
  2557. :-)  OOP is a neat academic idea which is occasionally useful but is
  2558. instead promoted as the cure-all to average programmers.  There are a lot
  2559. more average programmers out there then there are exceptional programmers. 
  2560. If the average programmers were taught proper modular design instead of the
  2561. latest OOP fad, it would make life much easier on the exceptional
  2562. programmers who have to clean up the messes left behind.
  2563.  
  2564. ---------------------------
  2565.  
  2566. >From Aegir@www.dma.be (Aegir)
  2567. Subject: Writing Netscape Plugins...How ?
  2568. Date: 7 Nov 1996 23:40:00 GMT
  2569. Organization: ProSoft
  2570.  
  2571. Help wanted...
  2572.  
  2573. I'm looking for some example code or anyone who can help me with the following :
  2574.  
  2575. I want to write (try to write) a Nescape Plugin using CW Pascal.. How do
  2576. you do it and where can you find the specs ?
  2577. Or does one have to pay for this information ?
  2578.  
  2579. All help appreciated.
  2580.  
  2581. +++++++++++++++++++++++++++
  2582.  
  2583. >From mieczko1@acsu.buffalo.edu (Mark C Mieczkowski)
  2584. Date: 8 Nov 1996 16:59:29 GMT
  2585. Organization: UB
  2586.  
  2587. In article <Aegir-0811960043470001@news.ping.be>,
  2588. Aegir <Aegir@www.dma.be> wrote:
  2589. >Help wanted...
  2590. >
  2591. >I'm looking for some example code or anyone who can help me with the following :
  2592. >
  2593. >I want to write (try to write) a Nescape Plugin using CW Pascal.. How do
  2594. >you do it and where can you find the specs ?
  2595. >Or does one have to pay for this information ?
  2596. >
  2597. >All help appreciated.
  2598.  
  2599. Check out this month's MacTech! <http://web.xplain.com/mactech.com/>
  2600.  
  2601. regards,
  2602.  
  2603. +++++++++++++++++++++++++++
  2604.  
  2605. >From "Zane H. Healy" <healyzh@ix.netcom.com>
  2606. Date: Fri, 08 Nov 1996 01:04:47 -0800
  2607. Organization: Netcom
  2608.  
  2609. Aegir wrote:
  2610. > I'm looking for some example code or anyone who can help me with the following :
  2611. > I want to write (try to write) a Nescape Plugin using CW Pascal.. How 
  2612.  
  2613. I haven't had a chance to read it, but the current issue of MacTech
  2614. (Nov) has an article on writing Netscape Plugins (of course it's
  2615. probably for C).
  2616.  
  2617.                         Zane
  2618.  
  2619. +++++++++++++++++++++++++++
  2620.  
  2621. >From Jon Summers <summersjon@s054.aone.net.au>
  2622. Date: Tue, 12 Nov 1996 07:50:14 +1000
  2623. Organization: Sumware Pty Limited
  2624.  
  2625. Pascal?
  2626. Hope your good at translating C !
  2627. The Netscape SDK is in C and there is a C++ framework
  2628. and the latest framework gives you basic Java support.
  2629.  
  2630. If you can get your hands on a MacHack 96 CD,
  2631. there is source for a Netscape 2/3 & MIE plugin
  2632. that does basic QuickTime, including QuickTime VR.
  2633.  
  2634. -- 
  2635. Jon Summers
  2636. Sumware Pty Limited
  2637. summersjon@s054.aone.net.au
  2638.  
  2639. +++++++++++++++++++++++++++
  2640.  
  2641. >From Online@MacTech.com ( nick.c @MT )
  2642. Date: Mon, 18 Nov 1996 19:13:03 -0800
  2643. Organization: MacTech Magazine
  2644.  
  2645.  
  2646.  
  2647.       Have you checked out the November issue of MacTech?
  2648.         One of the feature articles is about building Netscape
  2649.         plugins.
  2650.  
  2651.  
  2652.  
  2653.  
  2654. ____Nicholas C. DeMello, Ph.D.___________________________________________
  2655. "MacTech Online"--MacTech Magazine, for Mac OS Programmers and Developers
  2656.      http://www.MacTech.com/
  2657.                                         _/   _/  _/  _/_/_/   _/   _/  
  2658.    Chemistry: Nick@chem.UCLA.edu       _/_/ _/  _/  _/   _/  _/_/_/ 
  2659.      MacTech: Online@MacTech.com      _/ _/_/  _/  _/       _/ _/    
  2660.         http://www.chem.ucla.edu/~nick/   _/  _/   _/_/_/  _/   _/     
  2661.  
  2662. ---------------------------
  2663.  
  2664. >From phenix@interpath.com (John Moreno)
  2665. Subject: [Q] AppleScript Variable
  2666. Date: Tue, 12 Nov 1996 23:44:23 -0500
  2667. Organization: phenix@interpath.com
  2668.  
  2669. I'd like to share a variable between two script files.  Does anybody
  2670. have any examples of this?  Or how to get one script to call the
  2671. function in another.  Any help would be appreciated.
  2672.  
  2673. --
  2674. John Moreno
  2675.  
  2676. +++++++++++++++++++++++++++
  2677.  
  2678. >From js12@gte.com (John Schettino)
  2679. Date: Thu, 14 Nov 1996 13:51:47 -0400
  2680. Organization: GTE Laboratories, Inc.
  2681.  
  2682. In article <199611122344238208401@roxboro-186.interpath.net>,
  2683. phenix@interpath.com (John Moreno) wrote:
  2684.  
  2685. > I'd like to share a variable between two script files.  Does anybody
  2686. > have any examples of this?  Or how to get one script to call the
  2687. > function in another.  Any help would be appreciated.
  2688.  
  2689. You can call a handler in another running script by using tell - you can
  2690. also access properties in another running script using tell or a property
  2691. reference:
  2692.  
  2693.  
  2694. Script a, saved as a stay-open application
  2695.  
  2696. property myValue : 100
  2697.  
  2698. on doSomethingA(theString)
  2699.    display dialog "A was told to " & theString
  2700. end doSomethingA
  2701.  
  2702.  
  2703. on incrementA()
  2704.    set myValue to myValue + 1
  2705. end incrementA
  2706.  
  2707. - ---
  2708.  
  2709. Script b, saved as a stay-open application
  2710.  
  2711. on run
  2712.    tell application "a" to activate -- start a
  2713.    activate
  2714.    local aval
  2715.    tell application "a"
  2716.       set aval to application "a"'s myValue
  2717.    end tell
  2718.    
  2719.    display dialog "A's myValue is: " & aval
  2720.    
  2721.    tell application "a" to incrementA()
  2722.    tell application "a" to activate -- start a
  2723.    tell application "a" to doSomethingA("say this!")
  2724.    activate
  2725.    display dialog "A's myValue is: " & aval -- note old value
  2726.    
  2727.    set aval to myValue of application "a" -- property reference
  2728.    
  2729.    display dialog "A's myValue is: " & aval -- now new value
  2730. end run
  2731.  ==--
  2732. John Schettino
  2733. HomePage: http://members.aol.com/pdcjohns
  2734.  
  2735. +++++++++++++++++++++++++++
  2736.  
  2737. >From phenix@interpath.com (John Moreno)
  2738. Date: Sat, 16 Nov 1996 11:08:20 -0500
  2739. Organization: phenix@interpath.com
  2740.  
  2741. John Schettino <js12@gte.com> wrote:
  2742.  
  2743. ] In article <199611122344238208401@roxboro-186.interpath.net>,
  2744. ] phenix@interpath.com (John Moreno) wrote:
  2745. ] > I'd like to share a variable between two script files.  Does anybody
  2746. ] > have any examples of this?  Or how to get one script to call the
  2747. ] > function in another.  Any help would be appreciated.
  2748. ] You can call a handler in another running script by using tell - you
  2749. ] can also access properties in another running script using tell or a
  2750. ] property reference:
  2751.  
  2752. -snip code-
  2753.  
  2754.  
  2755. Ok, thanks.  But I didn't think the other script had to be running at
  2756. the time, so I have another question - How can I get script a, the one
  2757. saved as stay-open application, to quit?
  2758.  
  2759. Also do you have any recommendations for a good AppleScript programming
  2760. book?
  2761.  
  2762. --
  2763. John Moreno
  2764.  
  2765. +++++++++++++++++++++++++++
  2766.  
  2767. >From js12@gte.com (John Schettino)
  2768. Date: Mon, 18 Nov 1996 15:13:49 -0400
  2769. Organization: GTE Laboratories, Inc.
  2770.  
  2771. In article <199611161108202604576@roxboro-188.interpath.net>,
  2772. phenix@interpath.com (John Moreno) wrote:
  2773.  
  2774. > John Schettino <js12@gte.com> wrote:
  2775. > ] In article <199611122344238208401@roxboro-186.interpath.net>,
  2776. > ] phenix@interpath.com (John Moreno) wrote:
  2777. > ] 
  2778. > ] > I'd like to share a variable between two script files.  Does anybody
  2779. > ] > have any examples of this?  Or how to get one script to call the
  2780. > ] > function in another.  Any help would be appreciated.
  2781. > ] 
  2782. > ] You can call a handler in another running script by using tell - you
  2783. > ] can also access properties in another running script using tell or a
  2784. > ] property reference:
  2785. > -snip code-
  2786. > Ok, thanks.  But I didn't think the other script had to be running at
  2787. > the time, so I have another question - How can I get script a, the one
  2788. > saved as stay-open application, to quit?
  2789.  
  2790. tell application "a" to quit
  2791.  
  2792. > Also do you have any recommendations for a good AppleScript programming
  2793. > book?
  2794.  
  2795. Ahem... I happen to have written one on AppleScript and FaceSpan (see my
  2796. home page http://members.aol.com/pdcjohns)
  2797.  
  2798. My book aside, you need to download Apple's AppleScript language guide
  2799. english dialect from the Apple developer ftp site. Danny Goodman's
  2800. AppleScript Handbook is good, too. Check out
  2801. http://applescript.infovista.com/ for lots of applescript info and book
  2802. listings (specifically
  2803. http://applescript.infovista.com/as/support.html#books)
  2804.  ==--
  2805. John Schettino
  2806. HomePage: http://members.aol.com/pdcjohns
  2807.  
  2808. ---------------------------
  2809.  
  2810. >From masunta@news.siba.fi (Miika Asunta)
  2811. Subject: [Q] Difference between MOVE.L and MOVEA.L
  2812. Date: 18 Nov 1996 00:38:37 +0200
  2813. Organization: Sibelius Academy, Helsinki
  2814.  
  2815. What's the difference between 68000 assembler instructions
  2816. MOVE.L and MOVEA.L?
  2817. -- 
  2818. Miika Asunta                Double Bass Player
  2819. Miika.Asunta@siba.fi            Macintosh Programmer
  2820. tel. +358-0-7374 89            
  2821. GSM: +358-40-5477 842            http://www.siba.fi/~masunta
  2822.  
  2823. +++++++++++++++++++++++++++
  2824.  
  2825. >From jwwalker@millennianet.com (James W. Walker)
  2826. Date: Sun, 17 Nov 1996 16:19:53 -0800
  2827. Organization: Nisus Software, Inc.
  2828.  
  2829. In article <56o45d$ff3@amadeus.siba.fi>, masunta@news.siba.fi (Miika
  2830. Asunta) wrote:
  2831.  
  2832. >What's the difference between 68000 assembler instructions
  2833. >MOVE.L and MOVEA.L?
  2834.  
  2835. In MOVEA.L, the destination of the move is an address register.
  2836. -- 
  2837.   --  Jim Walker <http://members.aol.com/jwwalker/>
  2838.  
  2839. +++++++++++++++++++++++++++
  2840.  
  2841. >From steve@brecher.reno.nv.us (Steve Brecher)
  2842. Date: Sun, 17 Nov 1996 22:27:45 -0800
  2843. Organization: none, in Reno NV USA
  2844.  
  2845. masunta@news.siba.fi (Miika Asunta) wrote:
  2846.  
  2847. > What's the difference between 68000 assembler instructions
  2848. > MOVE.L and MOVEA.L?
  2849.  
  2850. Move.L moves a 32-bit value to a data register or to memory, sets the N and Z
  2851. condition codes to reflect the data moved and clears the V and C condition
  2852. codes.
  2853.  
  2854. MoveA.L moves a 32-bit value to an address register; the condition
  2855. codes are not affected.
  2856.  
  2857. -- 
  2858. steve@brecher.reno.nv.us (Steve Brecher)
  2859.  
  2860. ---------------------------
  2861.  
  2862. >From hooty@odyssee.net (Eric Dorland)
  2863. Subject: [Q] Hiding Applications
  2864. Date: Sun, 10 Nov 1996 16:46:22 -0400
  2865. Organization: Odyssee Internet
  2866.  
  2867. How do you find out if application is hidden (From using one of the hide
  2868. commands from the application menu) and how do you hide an application
  2869. from your code?
  2870.  
  2871. Eric Dorland
  2872. hooty@odyssee.net
  2873. http://www.odyssee.net/~hooty/
  2874.  
  2875. +++++++++++++++++++++++++++
  2876.  
  2877. >From zobkiw@triplesoft.com (Joe Zobkiw)
  2878. Date: Mon, 11 Nov 1996 07:37:20 -0500
  2879. Organization: TripleSoft Inc.
  2880.  
  2881. In article <hooty-1011961646220001@news.odyssee.net>, hooty@odyssee.net
  2882. (Eric Dorland) wrote:
  2883.  
  2884. > How do you find out if application is hidden (From using one of the hide
  2885. > commands from the application menu) and how do you hide an application
  2886. > from your code?
  2887.  
  2888. The Process Manager can help you.
  2889.  
  2890. <http://devworld.apple.com/dev/techsupport/insidemac/Processes/Processes-2.html>
  2891.  
  2892. - -----------------------------------------------------------
  2893. Joe Zobkiw                     <mailto:zobkiw@triplesoft.com>
  2894. TripleSoft Inc.                  <http://www.triplesoft.com/>
  2895. Macintosh Software Development & Internet Publishing Services
  2896. - -----------------------------------------------------------
  2897. Macintosh Programmers:  <http://www.triplesoft.com/fragment/>
  2898. Macintosh WebMasters: <http://www.triplesoft.com/screenview/>
  2899. Personal Page:         <http://www.triplesoft.com/zobintosh/>
  2900.  
  2901. +++++++++++++++++++++++++++
  2902.  
  2903. >From hooty@odyssee.net (Eric Dorland)
  2904. Date: Tue, 12 Nov 1996 19:09:35 -0400
  2905. Organization: Odyssee Internet
  2906.  
  2907. In article <zobkiw-ya023180001111960737200001@client.news.psi.net>,
  2908. zobkiw@triplesoft.com (Joe Zobkiw) wrote:
  2909.  
  2910. > In article <hooty-1011961646220001@news.odyssee.net>, hooty@odyssee.net
  2911. > (Eric Dorland) wrote:
  2912. > > How do you find out if application is hidden (From using one of the hide
  2913. > > commands from the application menu) and how do you hide an application
  2914. > > from your code?
  2915. > The Process Manager can help you.
  2916. >
  2917. <http://devworld.apple.com/dev/techsupport/insidemac/Processes/Processes-2.html>
  2918.  
  2919. Actually, I can't find anything in IM: Processes about hiding applications
  2920.  
  2921. Eric Dorland
  2922. hooty@odyssee.net
  2923. http://www.odyssee.net/~hooty/
  2924.  
  2925. +++++++++++++++++++++++++++
  2926.  
  2927. >From hooty@odyssee.net (Eric Dorland)
  2928. Date: Wed, 13 Nov 1996 21:19:35 -0400
  2929. Organization: Odyssee Internet
  2930.  
  2931. In article
  2932. <samizdat-1311961139270001@pool002-max5.la-ca-us.dialup.earthlink.net>,
  2933. samizdat@earthlink.net (Chris Kelly) wrote:
  2934.  
  2935. Is there an official way, using the Process manager or Apple Events?
  2936.  
  2937. > If you can't find a better way, two skanky hacks I can think of are:
  2938. > 1. Use the undocumented Layer Manager, information on which can be found
  2939. > in old Info Mac digests.
  2940. > 2. Use SystemMenu( 0xBF970001 ) or simulate an option-click on the desktop to
  2941. > hide the front app.
  2942.  
  2943. Eric Dorland
  2944. hooty@odyssee.net
  2945. http://www.odyssee.net/~hooty/
  2946.  
  2947. +++++++++++++++++++++++++++
  2948.  
  2949. >From Bill Hubauer <hubauer@nauticom.net>
  2950. Date: 14 Nov 96 13:31:44 GMT
  2951. Organization: Power On Software
  2952.  
  2953. In article <zobkiw-ya023180001111960737200001@client.news.psi.net> Joe
  2954. Zobkiw, zobkiw@triplesoft.com writes:
  2955.  
  2956. >> How do you find out if application is hidden (From using one of the hide
  2957. >> commands from the application menu) and how do you hide an application
  2958. >> from your code?
  2959. >
  2960. >The Process Manager can help you.
  2961. >
  2962.  
  2963. For those of you who do not know, Joe is a very smart guy who is usually
  2964. right on the money
  2965. with his answers, but I don't think he had his coffee this morning ;-)
  2966.  
  2967. The process manager doesn't really have any part of controling an
  2968. applications visible/hidden state (as there is no public interface for
  2969. that
  2970. in processes.h).  The visible state is controled by the mythical "Layer
  2971. Manager",
  2972. which is, I suppose, really part of the process manager (multifinder)
  2973. portion of
  2974. the system software.
  2975.  
  2976. The Layer Manager was not made available for programmers to use (there is
  2977. no public API).
  2978. There was a good reason for this, it is a gross hack.  Even though I call
  2979. it a 
  2980. "Gross Hack", it is, none the less, a tribute to the ingenuity of the
  2981. some really sharp mac developers...
  2982.  
  2983. There is lots to say about the Layer Manager but unless someone really
  2984. wants to
  2985. know, I'd just as soon not talk about it.  There was a header file 
  2986. called "Layers.h" floating around the net a while back that would provide
  2987. you with a way to hide and show application layers...
  2988.  
  2989. The closest thing to a "legit" way to hide an application
  2990. is to bring it to the front with "SetFrontProcess" and then
  2991. call SystemMenu to fake a menu selection of "Hide <front app name>"
  2992. from the process menu.  I don't know if any legit way to
  2993. tell if a process is hidden, although you can do that with
  2994. the "Layers.h" file I was talking about.
  2995.  
  2996. Bill Hubauer
  2997. Power On Software
  2998.  
  2999. +++++++++++++++++++++++++++
  3000.  
  3001. >From samizdat@earthlink.net (Chris Kelly)
  3002. Date: Wed, 13 Nov 1996 11:39:27 -0800
  3003. Organization: Samizdat Productions
  3004.  
  3005. If you can't find a better way, two skanky hacks I can think of are:
  3006.  
  3007. 1. Use the undocumented Layer Manager, information on which can be found
  3008. in old Info Mac digests.
  3009.  
  3010. 2. Use SystemMenu( 0xBF970001 ) or simulate an option-click on the desktop to
  3011. hide the front app.
  3012.  
  3013. Chris Kelly
  3014. samizdat@earthlink.net
  3015. http://home.earthlink.net/~samizdat
  3016.  
  3017.  
  3018. In article <hooty-1211961909350001@news.odyssee.net>, hooty@odyssee.net
  3019. (Eric Dorland) wrote:
  3020.  
  3021. > In article <zobkiw-ya023180001111960737200001@client.news.psi.net>,
  3022. > zobkiw@triplesoft.com (Joe Zobkiw) wrote:
  3023. > > In article <hooty-1011961646220001@news.odyssee.net>, hooty@odyssee.net
  3024. > > (Eric Dorland) wrote:
  3025. > > 
  3026. > > > How do you find out if application is hidden (From using one of the hide
  3027. > > > commands from the application menu) and how do you hide an application
  3028. > > > from your code?
  3029. > > 
  3030. > > The Process Manager can help you.
  3031. > > 
  3032. > >
  3033. >
  3034. <http://devworld.apple.com/dev/techsupport/insidemac/Processes/Processes-2.html>
  3035. > > 
  3036. > Actually, I can't find anything in IM: Processes about hiding applications
  3037. > Eric Dorland
  3038. > hooty@odyssee.net
  3039. > http://www.odyssee.net/~hooty/
  3040.  
  3041. +++++++++++++++++++++++++++
  3042.  
  3043. >From jeremyr@dcs.qmw.ac.uk (Jeremy Roussak)
  3044. Date: 13 Nov 1996 22:23:08 GMT
  3045. Organization: Queen Mary & Westfield College, London, England
  3046.  
  3047. In article <hooty-1211961909350001@news.odyssee.net>
  3048. hooty@odyssee.net (Eric Dorland) writes:
  3049.  
  3050. > In article <zobkiw-ya023180001111960737200001@client.news.psi.net>,
  3051. > zobkiw@triplesoft.com (Joe Zobkiw) wrote:
  3052. > > In article <hooty-1011961646220001@news.odyssee.net>, hooty@odyssee.net
  3053. > > (Eric Dorland) wrote:
  3054. > > 
  3055. > > > How do you find out if application is hidden (From using one of the hide
  3056. > > > commands from the application menu) and how do you hide an application
  3057. > > > from your code?
  3058. > > 
  3059. > > The Process Manager can help you.
  3060. > > 
  3061. > >
  3062. > <http://devworld.apple.com/dev/techsupport/insidemac/Processes/Processes-2.html>
  3063. > > 
  3064. > Actually, I can't find anything in IM: Processes about hiding applications
  3065.  
  3066. I think that's because there's nothing there.
  3067.  
  3068. Hiding is done by the Layer Manager. Its API isn't officially
  3069. documented and Apple has said that if you use it, they'll send the boys
  3070. round in the middle of the night to smash your windows and let down
  3071. your car tyres. 
  3072.  
  3073. However, there are ways round the problem. First, you can find the API,
  3074. which some brave souls have documented, and use it (having first
  3075. installed bullet-proof glass and locked your garage).
  3076.  
  3077. Alternatively, and probably rather less likely to break in the future,
  3078. you can hide and show processes by asking the Finder to do it for you.
  3079.  
  3080. tell application "Finder"
  3081.   set the visible of process "eric" to false
  3082. end tell
  3083.  
  3084. of course, if you want to hide the finder itself, you need something
  3085. slightly different
  3086.  
  3087. tell application "Finder"
  3088.   set visible to false
  3089. end tell
  3090.  
  3091. Good luck!
  3092.  
  3093. Jeremy
  3094.  
  3095. +++++++++++++++++++++++++++
  3096.  
  3097. >From jonpugh@frostbitefalls.com (Jon Pugh)
  3098. Date: Fri, 15 Nov 1996 23:08:02 -0800
  3099. Organization: Whatsa Madda U.
  3100.  
  3101. In article <hooty-1311962119350001@news.odyssee.net>, hooty@odyssee.net
  3102. (Eric Dorland) wrote:
  3103.  
  3104. >Is there an official way, using the Process manager or Apple Events?
  3105.  
  3106. Apple events are the official way.  You can send events to the Finder
  3107. fairly easily if you are willing to use some tricks.  I've included sample
  3108. code for just these functions (i.e finding hidden apps) in my Jon's
  3109. Commands scripting addition:
  3110.  
  3111.     ftp://ftp.infoworkshop.com/%2Fpublic/JonPugh/JonsCommands.sit.hqx
  3112.  
  3113. Good luck.
  3114.  
  3115. Jon
  3116.  
  3117. -- 
  3118. What are YOU doing to oppose the Microsoft juggernaut?
  3119.          http://www.infoworkshop.com/~jonpugh/
  3120.  
  3121. +++++++++++++++++++++++++++
  3122.  
  3123. >From Online@MacTech.com ( nick.c @MT )
  3124. Date: Mon, 18 Nov 1996 11:54:14 -0800
  3125. Organization: MacTech Magazine
  3126.  
  3127.  
  3128.  
  3129.  
  3130.    Jeremy & Chris,
  3131.  
  3132.       This questions seems to get asked and answered about
  3133.         every three months.  Has anyone sent the answer in
  3134.         to the MacTech "tips & tidbits" section yet?  If
  3135.         not, think about it.  MacTech pays hard cash for 
  3136.         neat tricks...  Steve Sisak is the Tips columnist
  3137.         and can be contacted at <tips@mactech.com>.
  3138.  
  3139.  
  3140.  
  3141.  
  3142.  
  3143. __hooty@odyssee.net (Eric Dorland) wrote_______________________________
  3144.  
  3145. >> > > How do you find out if application is hidden (From using one of the hide
  3146. >> > > commands from the application menu) and how do you hide an application
  3147. >> > > from your code?
  3148.  
  3149.  
  3150. __samizdat@earthlink.net (Chris Kelly) wrote___________________________
  3151.  
  3152. >If you can't find a better way, two skanky hacks I can think of are:
  3153. >
  3154. >1. Use the undocumented Layer Manager, information on which can be found
  3155. >in old Info Mac digests.
  3156. >
  3157. >2. Use SystemMenu( 0xBF970001 ) or simulate an option-click on the desktop to
  3158. >hide the front app.
  3159. >
  3160. >Chris Kelly
  3161. >samizdat@earthlink.net
  3162. >http://home.earthlink.net/~samizdat
  3163.  
  3164.  
  3165. __jeremyr@dcs.qmw.ac.uk (Jeremy Roussak) wrote__________________________
  3166.  
  3167. >Hiding is done by the Layer Manager. Its API isn't officially
  3168. >documented and Apple has said that if you use it, they'll send the boys
  3169. >round in the middle of the night to smash your windows and let down
  3170. >your car tyres. 
  3171. >
  3172. >However, there are ways round the problem. First, you can find the API,
  3173. >which some brave souls have documented, and use it (having first
  3174. >installed bullet-proof glass and locked your garage).
  3175. >
  3176. >Alternatively, and probably rather less likely to break in the future,
  3177. >you can hide and show processes by asking the Finder to do it for you.
  3178. >
  3179. >tell application "Finder"
  3180. >  set the visible of process "eric" to false
  3181. >end tell
  3182. >
  3183. >of course, if you want to hide the finder itself, you need something
  3184. >slightly different
  3185. >
  3186. >tell application "Finder"
  3187. >  set visible to false
  3188. >end tell
  3189. >
  3190. >Good luck!
  3191. >
  3192. >Jeremy
  3193.  
  3194.  
  3195.  
  3196.  
  3197. ____Nicholas C. DeMello, Ph.D.___________________________________________
  3198. "MacTech Online"--MacTech Magazine, for Mac OS Programmers and Developers
  3199.      http://www.MacTech.com/
  3200.                                         _/   _/  _/  _/_/_/   _/   _/  
  3201.    Chemistry: Nick@chem.UCLA.edu       _/_/ _/  _/  _/   _/  _/_/_/ 
  3202.      MacTech: Online@MacTech.com      _/ _/_/  _/  _/       _/ _/    
  3203.         http://www.chem.ucla.edu/~nick/   _/  _/   _/_/_/  _/   _/     
  3204.  
  3205. ---------------------------
  3206.  
  3207. >From srw@zanshin.com (Steve R Webster)
  3208. Subject: [Q] How to tell if you're "hidden"?
  3209. Date: Thu, 14 Nov 1996 13:02:04 -0800
  3210. Organization: Zanshin Software Inc.
  3211.  
  3212. Hi-
  3213.   Anyone know how to determine whether your application's windows have
  3214. been "hidden" via the "Hide" item in the Application menu?
  3215.  
  3216.   I need to be able to determine the structure rect of my windows while
  3217. they've been hidden in this manner.  The problem is, GrafPtr->visible is
  3218. true while a window's hidden this way, but the content and structure rects
  3219. are trash.
  3220.  
  3221. thanks,
  3222. -steve
  3223.  
  3224. ---------------------------
  3225.  
  3226. >From jsoltys@woodinville.com (John Soltys)
  3227. Subject: [Q] forcing updateEvts & turning a font question
  3228. Date: Thu, 14 Nov 1996 01:11:52 -0800
  3229. Organization: The Edwards Agency
  3230.  
  3231. How can I force an updateEvt to cause the Event Manager to redraw a window?
  3232.  
  3233. Additionally, is it possible to take a font family id, turn it into text,
  3234. and match it against a menu? I want to check the system font in a menu,
  3235. but can't seem to figure out how to get the item number.
  3236.  
  3237. +++++++++++++++++++++++++++
  3238.  
  3239. >From gga@it.ntu.edu.au (Giles Alexander)
  3240. Date: 14 Nov 1996 10:09:20 GMT
  3241. Organization: Northern Territory University
  3242.  
  3243. John Soltys (jsoltys@woodinville.com) wrote:
  3244. : How can I force an updateEvt to cause the Event Manager to redraw a window?
  3245.  
  3246. Call InvalRect() giving the rectangle of the window that you want to redraw.  
  3247. I think there is also an InvalRgn() function.  Both of these tell the window
  3248. manager that some part of the window needs to be redrwan.  An update event
  3249. will be generated.
  3250.  
  3251. Regards,
  3252. Giles Alexander
  3253.  
  3254. --
  3255. giles@kagi.com                          | If builders built buildings the way
  3256.                                         | programmers write programs, the
  3257. Check out Note:                         | first woodpecker that comes along
  3258. http://www.ozemail.com.au/~notesoft/    | would destroy all of civilisation.
  3259.  
  3260. +++++++++++++++++++++++++++
  3261.  
  3262. >From SouthSide@kagi.com (Bob Bradley)
  3263. Date: Thu, 14 Nov 1996 20:00:59 -0800
  3264. Organization: SPC
  3265.  
  3266. In article <jsoltys-1411960111520001@ppp-2-122.connect.com>,
  3267. jsoltys@woodinville.com (John Soltys) wrote:
  3268.  
  3269. > How can I force an updateEvt to cause the Event Manager to redraw a window?
  3270.  
  3271. Set the port to the window you want to redraw and call InvalRect or
  3272. InvalRgn with the area of the window you want to redraw.
  3273.  
  3274. > Additionally, is it possible to take a font family id, turn it into text,
  3275. > and match it against a menu? I want to check the system font in a menu,
  3276. > but can't seem to figure out how to get the item number.
  3277.  
  3278. If you have the name of a font, you can search the font menu for that name
  3279. to get it's item number. Use a binary search since the font menu is
  3280. sorted.
  3281.  
  3282. +++++++++++++++++++++++++++
  3283.  
  3284. >From kurisuto@babel.ling.upenn.edu (Sean Crist)
  3285. Date: 14 Nov 1996 13:48:47 GMT
  3286. Organization: University of Pennsylvania
  3287.  
  3288. In article <jsoltys-1411960111520001@ppp-2-122.connect.com>,
  3289. John Soltys <jsoltys@woodinville.com> wrote:
  3290. >How can I force an updateEvt to cause the Event Manager to redraw a window?
  3291.  
  3292. As someone else already said, you call InvalRect.
  3293.  
  3294. >Additionally, is it possible to take a font family id, turn it into text,
  3295. >and match it against a menu? I want to check the system font in a menu,
  3296. >but can't seem to figure out how to get the item number.
  3297.  
  3298. Yes.  First you call GetFontName(MyFontName, 0) to get the name of the
  3299. system font.  Then you loop through all the menu items in your font menu
  3300. until you match that name.  This is my generic routine for the matching,
  3301. which takes a menu and font name as its input and gives the number of the
  3302. menu item as output:
  3303.  
  3304.  function FindFontMenuItemByName (TheMenu: MenuHandle; TheName: Str255):
  3305. Integer;
  3306.   var
  3307.    counter: Integer;
  3308.    ItemTitle: Str255;
  3309.  begin
  3310.   FindFontMenuItemByName := -1;
  3311.   for counter := 1 to CountMItems(TheMenu) do
  3312.    begin
  3313.     GetItem(TheMenu, counter, ItemTitle);
  3314.     if EqualString(TheName, ItemTitle, FALSE, FALSE) then
  3315.      FindFontMenuItemByName := counter;
  3316.    end;
  3317.  end;
  3318.  
  3319.  
  3320.   \/ __ __    _\_     --Sean Crist  (kurisuto@unagi.cis.upenn.edu)
  3321.  ---  |  |    \ /     For a free copy of the Bill of Rights, finger
  3322.   _| ,| ,|   -----    this account.  It's also available through
  3323.   _| ,| ,|    [_]     my homepage:
  3324.    |  |  |    [_]     http://www.ling.upenn.edu/~kurisuto/
  3325.  
  3326. ---------------------------
  3327.  
  3328. >From msbishop@ix.netcom.com (Matt Bishop)
  3329. Subject: cicn-ICON conundrum (cicn != 32x32 == UGLY!)
  3330. Date: Wed, 13 Nov 1996 13:22:42 -0500
  3331. Organization: Zippo
  3332.  
  3333. I am attempting to use a color icon in a dialog box.  Following the
  3334. rules,  I create an ICON resource (ID 1000--found that one!) and then a
  3335. cicn resource with the same ID.  Using ResEdit I put an icon item in a
  3336. dialog and give it the icon resource 1000.  This all works fine.
  3337.  
  3338. NOW--when I change the size of the cicn to 16x16, the dialog displays a
  3339. box of garbage instead of my nicely cropped cicn.  (I haven't figured out
  3340. how to crop an ICON; my guess is you can't.)
  3341.  
  3342. Please tell me this isn't so.  I want to line up several icons in a row
  3343. (like a tool box) and I don't want to have to overlap 32x32 icon items!
  3344.  
  3345. -- 
  3346. Matt Bishop
  3347. msbishop@ix.netcom.com
  3348.  
  3349. +++++++++++++++++++++++++++
  3350.  
  3351. >From BHuey@worldnet.att.net (Hugh Johnson)
  3352. Date: Wed, 13 Nov 1996 23:48:29 -0500
  3353. Organization: AT&T WorldNet Services
  3354.  
  3355. In article <msbishop-1311961322420001@news.zippo.com>,
  3356. msbishop@ix.netcom.com (Matt Bishop) wrote:
  3357.  
  3358. > I am attempting to use a color icon in a dialog box.  Following the
  3359. > rules,  I create an ICON resource (ID 1000--found that one!) and then a
  3360. > cicn resource with the same ID.  Using ResEdit I put an icon item in a
  3361. > dialog and give it the icon resource 1000.  This all works fine.
  3362. > NOW--when I change the size of the cicn to 16x16, the dialog displays a
  3363. > box of garbage instead of my nicely cropped cicn.  (I haven't figured out
  3364. > how to crop an ICON; my guess is you can't.)
  3365. > Please tell me this isn't so.  I want to line up several icons in a row
  3366. > (like a tool box) and I don't want to have to overlap 32x32 icon items!
  3367.  
  3368. Using old-fashioned icons with cicn's of the same ID is the only way to
  3369. remain backward-compatible with straight 68000 Macs, I think. So that's
  3370. what's hampering you - black&white compatibility.
  3371.  
  3372. If you don't care about that compatibility, then what you should do is,
  3373. instead of putting icons in your DITL, just put userItems instead. At
  3374. run-time, just get your cicn handles and use PlotCIcon() (I think that's
  3375. what it's called?) into the userItem Rects in response to update events.
  3376.  
  3377. Actually, I think this would still be backward-compatible, because your
  3378. cicn's will have the black&white versions right in them.
  3379.  
  3380. -- 
  3381. The universe is a figment of it's own imagination.
  3382.  
  3383. +++++++++++++++++++++++++++
  3384.  
  3385. >From dstone@chem.utoronto.ca (David Stone)
  3386. Date: Fri, 15 Nov 1996 17:40:04 GMT
  3387. Organization: University of Toronto Chemistry
  3388.  
  3389. In article
  3390. <BHuey-1311962348290001@94.minnesota-002.mn.dial-access.att.net>,
  3391. BHuey@worldnet.att.net (Hugh Johnson) wrote:
  3392. [snip]
  3393. >  
  3394. > If you don't care about that compatibility, then what you should do is,
  3395. > instead of putting icons in your DITL, just put userItems instead. At
  3396. > run-time, just get your cicn handles and use PlotCIcon() (I think that's
  3397. > what it's called?) into the userItem Rects in response to update events.
  3398. >  
  3399. > Actually, I think this would still be backward-compatible, because your
  3400. > cicn's will have the black&white versions right in them.
  3401.  
  3402. Only if the B&W Mac in question is running system 7.x - PlotCIcon()
  3403. is not implemented otherwise.
  3404.  
  3405. Dave Stone
  3406.  
  3407. ---------------------------
  3408.  
  3409. >From mcovel@cais.com
  3410. Subject: mac batch file conversion
  3411. Date: Sat, 16 Nov 1996 12:53:42 -0500
  3412. Organization: Posted via CAIS Internet <info@cais.com>
  3413.  
  3414. Anyone have a rec. for mac batch file conversion. ie. from one application
  3415. to another, word to BBedit for ex.
  3416.  
  3417. Assistance or advice is appreciated.
  3418.  
  3419. Mike
  3420.  
  3421. mcovel@cais.com
  3422.  
  3423. +++++++++++++++++++++++++++
  3424.  
  3425. >From macwannabe@mac.land.com (MacWannaBe)
  3426. Date: Sun, 17 Nov 1996 19:14:32 GMT
  3427. Organization: Indigo
  3428.  
  3429. On Sat, 16 Nov 1996 12:53:42 -0500, mcovel@cais.com wrote:
  3430.  
  3431. >Anyone have a rec. for mac batch file conversion. ie. from one application
  3432. >to another, word to BBedit for ex.
  3433. >
  3434. >Assistance or advice is appreciated.
  3435. >
  3436. >Mike
  3437. >
  3438. >mcovel@cais.com
  3439.  
  3440. try MacLink Plus 8.1 from DataViz - it uses XTND filters to convert
  3441. from one format to another - and can be accessed from any program that
  3442. supports XTND (ClarisWorks, BBEdtit, etc) and also has a stand alone
  3443. Document Converter application - which lets you choose from what
  3444. format to convert from and to what format you want to convert to.
  3445.  
  3446.  
  3447.  
  3448. +++++++++++++++++++++++++++
  3449.  
  3450. >From andyb@apple.com (Andy Bachorski)
  3451. Date: Mon, 18 Nov 1996 17:28:59 -0800
  3452. Organization: Apple Computer, Inc.
  3453.  
  3454. Two applications come to mind. File Buddy, and File Typer. Both offer a
  3455. drag & drop interface for changing many file attributes, including file
  3456. type and creator codes, Finder flags etc. File Buddy will also change
  3457. dates, while File Typer allows you to create small applets that perform a
  3458. perconfigured change on files dropped on it. Both are available at your
  3459. favorite archive site.
  3460.  
  3461. Andy B
  3462.  
  3463. In article <mcovel-1611961253420001@mcovel.cais.com>, mcovel@cais.com wrote:
  3464.  
  3465. > Anyone have a rec. for mac batch file conversion. ie. from one application
  3466. > to another, word to BBedit for ex.
  3467. > Assistance or advice is appreciated.
  3468. > Mike
  3469. > mcovel@cais.com
  3470.  
  3471. +++++++++++++++++++++++++++
  3472.  
  3473. >From Jason J Mullins <jasonm@mcqueen.com>
  3474. Date: Mon, 18 Nov 1996 10:01:18 +0000
  3475. Organization: McQueen
  3476.  
  3477. mcovel@cais.com wrote:
  3478. > Anyone have a rec. for mac batch file conversion. ie. from one application
  3479. > to another, word to BBedit for ex.
  3480.  
  3481. Adobe do a product for Mac and Windows called Adobe File Utilities,
  3482. which is basically Word for Word translators and which can do batch
  3483. translations. I don't imagine that it will convert to BBedit, but on the
  3484. other hand BBedit can just open pure text, so there would be no
  3485. problems.
  3486.  
  3487. Try http://www.adobe.com/prodindex/fileutilities/main.html
  3488.  
  3489. J.
  3490.  
  3491. ---------------------------
  3492.  
  3493. >From lalo7475@saintmarys.edu
  3494. Subject: scrolling game help
  3495. Date: 8 Nov 1996 14:41:00 GMT
  3496. Organization: Deja News Usenet Posting Service
  3497.  
  3498. I'm trying to make an adventure game that scrolls from left to
  3499. right and top to bottum.   I'm hard coding and array of about
  3500. 100 by 140 of 32by32(pixel)tiles.   onl about 15 by 20 fit
  3501. in my window.   I want to make it so when the player goes from
  3502. one side of the screen (like the left) he would come out on the
  3503. other(the right, in this case) with that part of the world now the
  3504. tiles to be drawn in the window so my player can walk throw his whole
  3505. world.       Does anyone know how I can do this?
  3506. I have everything else to this game figured out but this.  I know it
  3507. should be easy but I've never seen how it's done and never made a
  3508. games world exceed the top of my screen.    Would appreciate all the
  3509. help I can get.
  3510. Thanks
  3511. Frank La Lone
  3512. - ---------------------------------------------------------------------
  3513. This article was posted to Usenet via the Posting Service at Deja News:
  3514. http://www.dejanews.com/          [Search, Post, and Read Usenet News!]
  3515.  
  3516. +++++++++++++++++++++++++++
  3517.  
  3518. >From s@w.nl (e)
  3519. Date: Tue, 12 Nov 1996 23:28:20 +0100
  3520. Organization: e
  3521.  
  3522. In article <847462119.13926@dejanews.com>, lalo7475@saintmarys.edu wrote:
  3523.  
  3524. > I'm trying to make an adventure game that scrolls from left to
  3525. > right and top to bottum.   I'm hard coding and array of about
  3526. > 100 by 140 of 32by32(pixel)tiles.   onl about 15 by 20 fit
  3527. > in my window.   I want to make it so when the player goes from
  3528. > one side of the screen (like the left) he would come out on the
  3529. > other(the right, in this case) with that part of the world now the
  3530. > tiles to be drawn in the window so my player can walk throw his whole
  3531. > world.       Does anyone know how I can do this?
  3532. > I have everything else to this game figured out but this.  I know it
  3533. > should be easy but I've never seen how it's done and never made a
  3534. > games world exceed the top of my screen.    Would appreciate all the
  3535. > help I can get.
  3536. > Thanks
  3537. > Frank La Lone
  3538. > -----------------------------------------------------------------------
  3539. > This article was posted to Usenet via the Posting Service at Deja News:
  3540. > http://www.dejanews.com/          [Search, Post, and Read Usenet News!]
  3541.  
  3542. hi
  3543. check out the new version of SpriteWorld, they implemented a scrolling
  3544. engine which does quite exactly what you want if i understood it correctly.
  3545. regards
  3546. sebastian
  3547.  
  3548. +++++++++++++++++++++++++++
  3549.  
  3550. >From lalo7475@saintmarys.edu
  3551. Date: Tue, 19 Nov 1996 00:31:07 -0600
  3552. Organization: Deja News Usenet Posting Service
  3553.  
  3554. Thanks a million   I found a "SpriteWorld 2"  I think it has every
  3555. thing that I need to it.   Awesome code for my needs. Thanks a lot.
  3556. Frank La Lone
  3557. > > -----------------------------------------------------------------------
  3558. > > This article was posted to Usenet via the Posting Service at Deja News:
  3559. > > http://www.dejanews.com/          [Search, Post, and Read Usenet News!]
  3560. > hi
  3561. > check out the new version of SpriteWorld, they implemented a scrolling
  3562. > engine which does quite exactly what you want if i understood it correctly.
  3563. > regards
  3564. > sebastian
  3565. - ---------------------------------------------------------------------
  3566. This article was posted to Usenet via the Posting Service at Deja News:
  3567. http://www.dejanews.com/           [Search, Post, and Read Usenet News]
  3568.  
  3569. ---------------------------
  3570.  
  3571. >From gnaegy@inanna.com (John Gnaegy)
  3572. Subject: where find routines for MacTCP connections?
  3573. Date: Fri, 15 Nov 1996 18:13:17 -0600
  3574. Organization: Inanna
  3575.  
  3576. I've got the Open Transport SDK, but I want to write a really simple
  3577. little app that'll work on machines using  either Open Transport OR
  3578. MacTCP.  Apple's so gung-ho about Open Transport that I can't seem to find
  3579. anything resembling a MacTCP SDK on Apple's dev site.  
  3580.  
  3581. If I use the OT SDK to write a little bot, will it work on machines using
  3582. MacTCP?  (I'm guessing no, right?)
  3583.  
  3584. Is there a library included in to the regular Mac headers that either does
  3585. specifically MacTCP connections, or just handles connections regardless of
  3586. which networking environment is in use?  If so, what's it called (like
  3587. strings.c, textututils.c, etc)?
  3588.  
  3589. To give you an idea of the simplicity involved, the app will just
  3590. periodically ping an IP address.  If it can't ping the address, or the
  3591. ping time is really long, then it launches another app.  I'm using
  3592. Codewarrior.
  3593.  
  3594. John
  3595. gnaegy@inanna.com
  3596. Inanna Design & Storage  www.inanna.com
  3597.  
  3598. +++++++++++++++++++++++++++
  3599.  
  3600. >From bill@scconsult.com (Bill Stewart-Cole)
  3601. Date: Sat, 16 Nov 1996 21:06:09 -0600
  3602. Organization: ZOG
  3603.  
  3604. In article <gnaegy-1511961813170001@mama.inanna.com>, gnaegy@inanna.com
  3605. (John Gnaegy) wrote:
  3606.  
  3607. >I've got the Open Transport SDK, but I want to write a really simple
  3608. >little app that'll work on machines using  either Open Transport OR
  3609. >MacTCP.  Apple's so gung-ho about Open Transport that I can't seem to find
  3610. >anything resembling a MacTCP SDK on Apple's dev site.  
  3611.  
  3612.  
  3613. Try ftp.seeding.apple.com. I believe the MacTCP SDK is still there.
  3614. CodeWarrior ships withthe MacTCP.h header, which rolls together all the
  3615. older headers. (it also has stubs of the old headers that just #include
  3616. MacTCP.h) The 'meat' of MacTCP is simply the .ipp driver that MacTCP
  3617. installs. The calls all go through the standard driver mechanism. 
  3618.  
  3619. However, some of the best sample code for MacTCP is not in the SDK, it is
  3620. in the source for NewsWatcher.  This is available at   
  3621. ftp://ftp.acns.nwu.edu/pub/newswatcher/ and unlike the sort of sample code
  3622. one finds in an SDK, this is well-tested code built for re-use and
  3623. implemented for a real application. It also shows a good example of
  3624. side-by-side implementation of MacTCP and OT TCP/IP.
  3625.  
  3626. -- 
  3627. Bill Stewart-Cole
  3628.  
  3629. ---------------------------
  3630.  
  3631. End of C.S.M.P. Digest
  3632. **********************
  3633.